#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
int t,n;
vector<pair<int,int> > qur;
unordered_map<int, int> mp;
int p[N];
int find(int x){
if(p[x]!=x)p[x]=find(p[x]);
return p[x];
}
void merge(int a,int b){
p[find(b)]=find(a);
}
int main(){
cin>>t;
while(t--){
cin>>n;
int cnt = 0;
bool flag = true;
for(int i=0;i<=N;i++)p[i]=i;
while(n--){
int i,j,e;
cin>>i>>j>>e;
if(mp.find(i)==mp.end())mp[i]=cnt++;
if(mp.find(j)==mp.end())mp[j]=cnt++;
if(e==1){
merge(mp[i],mp[j]);
}
else if(e==0)qur.push_back({mp[i],mp[j]});
for(int k=0;k<qur.size();k++){
int x = qur[k].first,y=qur[k].second;
if(find(x)==find(y)){
flag = false;
break;
}
}
}
mp.clear();
qur.clear();
if(flag)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}