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;
}