大佬教我调教一下这个代码
#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";
}
}