警示后人:如果你#3#8 WA了
查看原帖
警示后人:如果你#3#8 WA了
1207248
tyukp233楼主2024/1/13 10:30
#include<bits/stdc++.h>
using namespace std;
typedef long long llint;
int n,t;
struct node {
	llint x,y,e;
} s[100005];
unordered_map<llint,int> h;
int fa[200005];
inline void init() {
	for(int i=1; i<=2*n; i++)fa[i]=i;
}
int find(int p) {
	return p==fa[p]?p:(fa[p]=find(fa[p]));
}
inline void merge(int x,int y) {
	fa[find(x)]=find(y);
}
int main() {
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>t;
	while(t--) {
		h.clear();
		bool f=1;
		cin>>n;
		init();
		int cnt=0;
		for(int i=1; i<=n; i++) {
			llint p,q,r;
			cin>>p>>q>>r;
			s[i]= {p,q,r};
			if(r==0)continue;
			if(h[p]==0)h[p]=(++cnt);
			if(h[q]==0)h[q]=(++cnt);
			merge(h[p],h[q]);
		}
		for(int i=1; i<=n; i++) {
			if(s[i].e==1)continue;
			int p=s[i].x,q=s[i].y;
   		 	//不加下面的判定如果h[p]==0就会continue!
			if(p==q){
				cout<<"NO\n";
				f=0;
				break;
			}
			if(h[p]==0||h[q]==0)continue;
			if(find(h[p])==find(h[q])) {
				cout<<"NO\n";
				f=0;
				break;
			}
		}
		if(f)cout<<"YES\n";
	}
}

缩进是DevC++ Astyle的,见谅

2024/1/13 10:30
加载中...