90pts #2RE 求助
查看原帖
90pts #2RE 求助
1126325
Indestructible楼主2024/3/2 14:16
#include<bits/stdc++.h>
using namespace std;
int fa[200010],k=0;
int input[200010][3];
map<int,int> mymap;
int n,t;
int find(int x){
	if (x!=fa[x]) fa[x]=find(fa[x]);
	return fa[x];
}
void unionn(int x,int y){
	if (find(x)!=find(y)) fa[find(x)]=find(y);
}
bool judge(int x,int y){
	return find(x)==find(y);
}
bool isok(){
	for (int i=1;i<=200000;i++) fa[i]=i;
	memset(input,0,sizeof(input));
	mymap.clear();
	scanf("%d",&n);
	for (int i=1;i<=n;i++){
		scanf("%d%d%d",&input[i][0],&input[i][1],&input[i][2]);
		if (!input[i][2]) continue;
		if (mymap.find(input[i][0])==mymap.end()) mymap[input[i][0]]=++k;
		if (mymap.find(input[i][1])==mymap.end()) mymap[input[i][1]]=++k;
		unionn(input[i][0],input[i][1]);
	}
	for (int i=1;i<=n;i++){
		if (input[i][2]) continue;
		if (judge(input[i][0],input[i][1])) return 0;
	}
	return 1;
}
int main(){
//	freopen("D:\\Downloads\\P1955_2.in.txt","r",stdin);
	scanf("%d",&t);
	while (t--) if (isok()) printf("YES\n");
	else printf("NO\n");
	return 0;
}
2024/3/2 14:16
加载中...