#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,t,f[N],b[2*N],cnt=0;
struct node{
int l,r,e;
}a[N];
bool cmp(node x,node y){
return x.e>y.e;
}
int Find(int x){
if(x==f[x]) return x;
else return Find(f[x]);
}
void link(int x,int y){
f[Find(x)]=Find(y);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
memset(b,0,sizeof(b));
memset(a,0,sizeof(a));
memset(f,0,sizeof(f));
int flag=1;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].l>>a[i].r>>a[i].e;
b[++cnt]=a[i].l;
b[++cnt]=a[i].r;
}
sort(b+1,b+n+1);
int tmp=unique(b+1,b+cnt+1)-b-1;
for(int i=1;i<=n;i++){
a[i].l=lower_bound(b+1,b+tmp+1,a[i].l)-b;
a[i].r=lower_bound(b+1,b+tmp+1,a[i].r)-b;
}
for(int i=1;i<=2e5+10;i++) f[i]=i;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
int fx=Find(a[i].l),fy=Find(a[i].r);
if(a[i].e) link(fx,fy);
else if(fx==fy){
cout<<"NO\n";
flag=0;
break;
}
}
if(flag) cout<<"YES\n";
}
return 0;
}
欢迎大佬指正