#include <bits/stdc++.h>
using namespace std;

const int N=1e6+5;

struct DSU{
    vector<int> f,rk;
    void init(int n){
        rk.assign(n,0);
        f.resize(n);
        iota(f.begin(),f.end(),0);
    }
    int fd(int x){
        if(f[x]!=x)f[x]=fd(f[x]);
        return f[x];
    }
    bool same(int x,int y){
        return fd(x)==fd(y);
    }
    void merge(int x,int y){
        int fx=fd(x),fy=fd(y);
        if(fx==fy)return;
        if(rk[fx]<rk[fy])swap(fx,fy);
        if(rk[fx]==rk[fy])rk[fx]++;
        f[fy]=fx;
    }
}d;


int a[N],b[N],c[N];

int main() {

    // cin.tie(0)->sync_with_stdio(0);
    int t=1;
    // cin>>t;
    scanf("%d",&t);
    while(t--){
        unordered_map<int,int> mp;
        vector<int> V;
        int n;
        // cin>>n;
        scanf("%d",&n);
        // vector<int> a(n),b(n),c(n);
        for(int i=0;i<n;i++){
            // cin>>a[i]>>b[i]>>c[i];
            scanf("%d %d %d",&a[i],&b[i],&c[i]);
            V.push_back(a[i]),V.push_back(b[i]);
        }
        sort(V.begin(),V.end());
        V.resize(unique(V.begin(),V.end())-V.begin());
        int m=V.size();
        for(int i=0;i<m;i++)mp[V[i]]=i+1;
        for(int i=0;i<n;i++)a[i]=mp[a[i]],b[i]=mp[b[i]];
        d.init(m*2+1);
        bool ok=true;
        for(int i=0;i<n;i++){
            if(c[i]){
                d.merge(a[i],b[i]);
                d.merge(a[i]+m,b[i]+m);
            }else {
                d.merge(a[i],b[i]+m);
                d.merge(a[i]+m,b[i]);
            }
            if(d.same(a[i],a[i]+m)||d.same(b[i],b[i]+m)){
                ok=false;
            }
        }
        // cout<<(ok?"YES":"NO")<<"\n";
        printf((ok?"YES\n":"NO\n"));
    }
}
// 64 位输出请用 printf("%lld")