27pts求调
查看原帖
27pts求调
1109707
godmoo楼主2024/5/20 14:04

rt,评测记录

#include<bits/stdc++.h>
#define pb push_back
#define is insert
#define INF INT_MAX
#define Mod(a,m) (((a)%(m)+(m))%(m))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=305;
const int MOD=1e9+7;
int n,m,t,a[N][N];
ll qpow(ll a,ll b){
	ll res=1;
	while(b){
		if(b&1) res=res*a%MOD;
		a=a*a%MOD,b>>=1;
	}
	return res;
}
void kirchhoff(int u,int v,int w){
	if(!t){
		a[u][u]+=w,a[v][v]+=w;
		a[u][v]-=w,a[v][u]-=w;
	}
	else a[v][v]+=w,a[u][v]-=w;
}
ll gauss(){
	ll ans=1;
	for(int i=2;i<=n;i++){ // 外向树删指定root 
		for(int j=i+1;j<=n;j++){
			if(!a[i][i]&&a[j][i]){
				ans=-ans;
				swap(a[i],a[j]);
				break;
			}
		}
		ll inv=qpow(a[i][i],MOD-2);
		for(int j=i+1;j<=n;j++){
			ll d=1ll*a[j][i]*inv%MOD;
			for(int k=i;k<=n;k++){
				a[j][k]=Mod(a[j][k]-d*a[i][k],MOD);
			}
		}
		ans=Mod(ans*a[i][i],MOD);
	}
	return ans;
}
int main(){
	scanf("%d%d%d",&n,&m,&t);
	for(int i=1,u,v,w;i<=m;i++){
		scanf("%d%d%d",&u,&v,&w);
		kirchhoff(u,v,w);
	}
//	for(int i=2;i<=n;i++) for(int j=2;j<=n;j++) a[i][j]=Mod(a[i][j],MOD);
	printf("%lld",gauss());
	return 0;
}
2024/5/20 14:04
加载中...