传送门
边上带权的并查集裸题。
或者直接暴力加边求权值差。
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int f[105],v[105],fl,T,x,y,z,p,q,n,m;
int get(int x){
if (f[x]==x) return x;
int t=get(f[x]);
v[x]+=v[f[x]];
return f[x]=t;
}
int main(){
scanf("%d",&T);
while (T--){
memset(v,0,sizeof(v));
fl=0;
scanf("%d%d",&n,&m);
for (int i=0;i<=n;i++) f[i]=i;
for (int i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z); x--;
p=get(x); q=get(y);
if (p!=q){
f[p]=q;
v[p]=v[y]-v[x]-z;
}
else if (v[y]-v[x]!=z) fl=1;
}
puts(fl?"false":"true");
}
}