50求助
查看原帖
50求助
560968
liyishao1125楼主2023/12/6 17:38

大佬教我调教一下这个代码

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,m,p[N],t;
unordered_map<int,int>mp;
struct Node{
	int x,y,e;
}q[N];
int get(int x){
	if(!mp.count(x))mp[x]=++n;
	return mp[x];
}
int find(int x){
	if(p[x]!=x)find(p[x]);
	return p[x];
}
int main(){
	cin>>t;
	while(t--){
		n=0;
		mp.clear();
		cin>>m;
		for(int i=0;i<m;i++){
			int x,y,e;
			cin>>x>>y>>e;
			x=get(x);y=get(y);
			q[i]={x,y,e};
		}
		for(int i=1;i<=n;i++)p[i]=i;
		for(int i=0;i<m;i++){
			if(q[i].e==1){
				int pa=find(q[i].x),pb=find(q[i].y);
				p[pa]=pb;
			}
		}
		bool flag=0;
		for(int i=0;i<m;i++){
			if(q[i].e==0){
				int pa=find(q[i].x),pb=find(q[i].y);
				if(find(q[i].x)==find(q[i].y)){
					flag=1;
					break;
				}
			}
		}
		if(flag)cout<<"NO"<<"\n";
		else cout<<"YES"<<"\n";
	}
}
2023/12/6 17:38
加载中...