曾经做过类似的题,用并查集维护S,T的相对距离。
#include<algorithm>
#include<cstring>
#include<vector>
#include<cstdio>
#include<queue>
using namespace std;
int pa[105], va[105];
int find(int x)
{
if(x==pa[x]) return x;
int tp=find(pa[x]);
va[x]+=va[pa[x]];
pa[x]=tp;
return pa[x];
}
int main()
{
int n, m, i, t, a, b, vv, fa, fb;
bool ok;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(i=0;i<=n;i++) pa[i]=i, va[i]=0;
ok=1;
while(m--){
scanf("%d%d%d",&a,&b,&vv);
a--;
fa=find(a), fb=find(b);
if(fa==fb){
if(va[b]-va[a]!=vv) ok=0;
}else{
pa[fb]=fa;
va[fb]=va[a]+vv-va[b];
}
}
if(ok) puts("true");
else puts("false");
}
return 0;
}