P1955 #2RE 2个月没过 求助
  • 板块学术版
  • 楼主Indestructible
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/11 20:45
  • 上次更新2024/5/11 22:36:31
查看原帖
P1955 #2RE 2个月没过 求助
1126325
Indestructible楼主2024/5/11 20:45
#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(){
	scanf("%d",&t);
	while (t--) if (isok()) printf("YES\n");
	else printf("NO\n");
	return 0;
}
2024/5/11 20:45
加载中...