求助并查集
  • 板块灌水区
  • 楼主Lemonlwl
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/7/8 10:32
  • 上次更新2023/11/3 11:05:41
查看原帖
求助并查集
729002
Lemonlwl楼主2023/7/8 10:32

rt

代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int f[1000005];
int find(int v){
	while(true){
		if(v==f[v]){
			return v;
		}
		else{
			v=f[v];
		}
	}
}
void join(int x,int y){
	int t1=find(x);
	int t2=find(y);
	if(t1==t2){
		return;
	}
	else{
		f[t2]=t1;
	}
}
int main(){
	int t;
	cin>>t;
	while(t--){
		memset(f,0,sizeof(f));
		bool flag=true;
		int n;
		cin>>n;
		for(int i=1;i<=n;i++){
			int a,b,c;
			cin>>a>>b>>c;
			if(c==1){
				join(a,b);
			}
			else{
				if(find(a)==find(b)){
					flag=false;
				}
			}
		}
		if(flag){
			cout<<"YES"<<endl;
		}
		else{
			cout<<"NO"<<endl;
		}
	}
	return 0;
}
2023/7/8 10:32
加载中...