#include<cstdio>#include<cstring>#include<algorithm>#define maxn 100005usingnamespace std;int T, n, f[maxn <<2];struct node{int x, y, opt;}q[maxn];intgetf(int x){return(x == f[x])? x :(f[x]=getf(f[x]));}int arr[maxn <<2];intmain(){scanf("%d",&T);while(T--){memset(arr,0,sizeof arr);scanf("%d",&n);for(int i =1; i <= n; i++){scanf("%d%d%d",&q[i].x,&q[i].y,&q[i].opt);
arr[++arr[0]]= q[i].x, arr[++arr[0]]= q[i].y;}sort(arr +1, arr + arr[0]+1);int m = n;for(int i =1; i <= n; i++){
m =max(m,(q[i].x =lower_bound(arr +1, arr + arr[0]+1, q[i].x)- arr));
m =max(m,(q[i].y =lower_bound(arr +1, arr + arr[0]+1, q[i].y)- arr));}for(int i =1; i <= m; i++) f[i]= i;for(int i =1; i <= n; i++)if(q[i].opt)if(getf(q[i].x)!=getf(q[i].y)) f[getf(q[i].x)]=getf(q[i].y);bool flag =false;for(int i =1; i <= n; i++)if(!q[i].opt)if(getf(q[i].x)==getf(q[i].y)){printf("NO\n");
flag =true;break;}if(!flag)printf("YES\n");}return0;}