90分代码求调
查看原帖
90分代码求调
736599
gaomuchen120309楼主2025/1/16 17:39
#include <map>
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
long long f[100005],n,cnt,tot=0;
pair<long long,long long> rule[100005];
map<int,int> lisan;
long long Find(long long x){
	if(f[x]==x){
		return x;
	}
	return f[x]=Find(f[x]);
}
void Union(long long x,long long y){
	x=Find(x);
	y=Find(y);
	f[x]=y;
}
void slove(){
	memset(f,0,sizeof f);
	cnt=0;
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		long long x,y,e;
		scanf("%lld %lld %lld",&x,&y,&e);
		if(lisan[x]==0){
			lisan[x]=++tot;
		}
		if(lisan[y]==0){
			lisan[y]=++tot;
		}
		x=lisan[x];
		y=lisan[y];
		if(f[x]==0){
			f[x]=x;
		}
		if(f[y]==0){
			f[y]=y;
		}
		if(e){
			Union(x,y);
		}
		else{
			rule[++cnt]=make_pair(x,y);
		}
	}
	for(int i=1;i<=cnt;i++){
		if(Find(rule[i].first)==Find(rule[i].second)){
			printf("NO\n");
			return;
		}
	}
	printf("YES\n");
}
int main() {
    long long t;
    scanf("%lld",&t);
    while(t--){
    	slove();
	}
    return 0;
}

二号用例RE了

2025/1/16 17:39
加载中...