#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=10000007;
int n,fa[MAXN],t,cnt,change[MAXN],cnt2;
struct data{
int i,j;
}noequ[MAXN];
int find(int x)
{
if(x==fa[x]) return x;
int root=find(fa[x]);
fa[x]=root;
return root;
}
void merge(int x,int y)
{
int rx=find(x),ry=find(y);
fa[rx]=ry;
}
signed main()
{
scanf("%lld",&t);
while(t--)
{
bool flag=1;
scanf("%lld",&n);
cnt=cnt2=0;
memset(change,0,sizeof(change));
fill(noequ,noequ+MAXN,(data){0,0});
for(int i=1;i<=2*n;i++) fa[i]=i;
for(int k=1;k<=n;k++)
{
int i,j,e;
scanf("%lld%lld%lld",&i,&j,&e);
if(!change[i])change[i]=++cnt;
if(!change[j])change[j]=++cnt;
if(e==1)
merge(change[i],change[j]);
if(e==0)
noequ[++cnt2]=(data){change[i],change[j]};
}
for(int i=1;i<=cnt2;i++)
{
int x=noequ[i].i,y=noequ[i].j;
if(find(x)==find(y))
{
flag=0;
break;
}
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}
我觉得这个数组已经开得够大了吧,为啥#2总RE呢