前缀和+带权并查集11分9RE求调
查看原帖
前缀和+带权并查集11分9RE求调
524085
yanbinmu楼主2022/11/27 15:25
#include <bits/stdc++.h>
using namespace std;
int f[1005],q[1005];
int find(int x)
{  
    if(x!=f[x])
    {	
        int t=find(f[x]);
        q[x]+=q[f[x]];
        f[x]=t;
    } 
    else return x;
    return f[x];  
}  
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	int w,n,m,s,t,v;
	cin>>w;
	for(int i = 1;i<=w;i++){
		cin>>n>>m;
		int flag = 0;
		for(int j = 1;j<=n;j++){
			f[j] = j;
			q[j] = 0;
		}
		for(int j = 1;j<=m;j++){
			cin>>s>>t>>v;
			s--;
			if(find(s)!=find(t)){
				q[f[t]]=q[s]-q[t]-v;  
                f[f[t]]=f[s];
			}
			else if(q[s]-q[t] != v){
				flag = 1;
				break;
			}
		}
		if(flag == 1)cout<<"false"<<endl;
		else cout<<"true"<<endl;
	} 
	return 0;
}
2022/11/27 15:25
加载中...