#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")