rt, WA on #2~#5 , #8
#include<bits/stdc++.h>
using namespace std;
class rul{//条件
public:
int a,b,c;
};
int find(int x,map<int,int> fa){//查找
if(x==fa[x])return x;
fa[x]=find(fa[x],fa);
return fa[x];
}
void add(int x1,int x2,map<int,int> fa){//合并
int f1=find(x1,fa),f2=find(x2,fa);
if(f1!=f2)fa[f1]=f2;
}
bool cmp(rul a,rul b){//排序
return a.c>b.c;
}
int main(){
int t;cin>>t;
while(t--){
map<int,int> fa;//并查集主体
int n,a,b,c;bool can=1;
cin>>n;
rul rules[n];
for(int i=0;i<n;i++){
cin>>rules[i].a>>rules[i].b>>rules[i].c;
}
sort(rules,rules+n,cmp);//1先0后
for(int i=0;i<n;i++){
if(rules[i].c==1)add(rules[i].a,rules[i].b,fa);
else{
if(find(rules[i].a,fa)==find(rules[i].a,fa))can=0;//矛盾
}
}
puts(can?"YES":"NO");//判断
}
}