#include<bits/stdc++.h>
using namespace std;
long long n,t,a,b,e;
struct bing{
int root[1000005];
int get(int p){
if(root[p]==p)return p;
return root[p]=get(root[p]);
}
void pus(int a,int b){
root[get(a)]=get(b);
}
bool iss(int a,int b){
int ra=get(a),rb=get(b);
if(ra==rb)return true;
else return false;
}
}v;
long long r[1000001][2];
int main(){
scanf("%lld",&t);
for(int j=1;j<=100001;j++){
v.root[j]=j;
}
for(int i=0;i<t;i++){
for(int j=1;j<100001;j++){
r[j][0]=r[j][1]=0;
}long long cnt=0,pos=0;
scanf("%lld",&n);map<long long,long long>mp;
for(int j=0;j<n;j++){
scanf("%lld%lld%lld",&a,&b,&e);
if(mp.find(a)==mp.end()){
cnt++;
mp[a]=cnt;
}
if(mp.find(b)==mp.end()){
cnt++;
mp[b]=cnt;
}
if(e){
v.pus(mp[a],mp[b]);
}else{pos++;
r[pos][0]=mp[a];
r[pos][1]=mp[b];
}
}
bool flag=true;
for(int i=1;i<=pos;i++){
if(v.iss(r[i][0],r[i][1])){
printf("NO\n");flag=false;
break;
}
}
if(flag)printf("YES\n");
for(int j=1;j<=100001;j++){
v.root[j]=j;
}
}
return 0;
}
总是wa on #2