我是最近刚刚开始学习并查集的。有些事情可能还不是特别明白。
现在求助的这道题,我就是用并查集做的。
【代码】
#include<bits/stdc++.h>
using namespace std;
struct num{
int x,y,e;
};
int fa[1000010];
bool cmp(num p,num q)
{
return p.e > q.e;
}
int find(int x)
{
if(fa[x]==x) return x;
fa[x]=find(fa[x]);
return fa[x];
}
int main()
{
int t;
cin>>t;
while(t--)
{
bool flag=true,flag2=true;
int n;
num a[1000005];
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].x>>a[i].y>>a[i].e;
if(a[i].x == a[i].y && a[i].e==0)
{
cout<<"NO";
flag=false;
break;
}
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n && flag==true;i++)
{
int xx=find(a[i].x);
int yy=find(a[i].y);
if(a[i].e==1)
if(xx!=yy)
fa[a[i].y]=a[i].x;
else if(xx==yy)
{
cout<<"NO";
flag2=false;
break;
}
}
if(flag==true && flag2==true) cout<<"YES";
cout<<endl;
}
return 0;
}