辣鸡题啊QAQ然而我交了好几次
#include "algorithm"
#include "iostream"
#include "stdio.h"
#define rep(f,a,b) for(f=a;f<=b;f++)
using namespace std;
const int N=1000005;
inline int read(){
int v=0; char ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while (ch<='9'&&ch>='0') { v=v*10+ch-'0'; ch=getchar();}
return v;
}
int fa[N],n,a[N],b[N],e[N],c[2*N];
int find(int x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
void work(){
n=read(); int i;
rep(i,1,2*n) fa[i]=i;
rep(i,1,n) {
c[2*i-1]=a[i]=read();
c[2*i]=b[i]=read();
e[i]=read();
} int cl=0; i=1;
sort(c+1,c+2*n+1);
while (i<=2*n){
c[++cl]=c[i++];
while (c[i]==c[i-1]&&++i<=2*n);
} int bot,top,mid;
rep(i,1,n){ bot=1,top=cl;
while (mid=(bot+top+1)>>1,bot<top){
c[mid]>a[i]?top=mid-1:bot=mid;
} mid=(bot+top)>>1;
a[i]=mid; bot=1,top=cl;
while (mid=(bot+top+1)>>1,bot<top){
c[mid]>b[i]?top=mid-1:bot=mid;
} mid=(bot+top)>>1;
b[i]=mid;
} int x,y;
rep(i,1,n){
x=find(a[i]),y=find(b[i]);
if (x!=y && e[i]) fa[x]=y;
}
rep(i,1,n){
x=find(a[i]),y=find(b[i]);
if (x==y && !e[i]){ puts("NO"); break;}
}
if(i>n) puts("YES");
}
int main(){
int T; T=read();
while(T--) work();
return 0;
}