debug了好久都快烦了呜呜呜呜呜呜呜呜呜呜
//
// Created by Arc on 2021/2/3.
//
#include <bits/stdc++.h>
#include <unordered_map>
using namespace std;
typedef pair<int, int> P;
const int N = 2e5 + 5;
vector<P> v1, v2;
int n,m,tot;
int fa[1000000];
unordered_map<int,int> mp;
void init(){
for (int i = 0; i < tot; ++i) {
fa[i]=i;
}
}
int get(int x){
if(fa[x]==x)
return x;
return fa[x]=get(fa[x]);
}
void merge(int x,int y){
fa[get(x)]=get(y);
}
int get_map(int x){
if(mp.count(x)) return mp[x];
return mp[x]=tot++;
}
int main(){
int t;
cin>>t;
while(t--){
cin>>n;
tot=0;
for (int i = 1; i <= n ; ++i) {
int x,y,e;
cin>>x>>y>>e;
x=get_map(x);
y=get_map(y);//离散化
if(e)
v1.emplace_back(x,y);
else
v2.emplace_back(x,y);
}
//并查集
init();
int v1_num=v1.size();
int v2_num=v2.size();
for (int i = 0; i < v1_num; ++i) {
merge(v1[i].first,v1[i].second);
}
bool flag=true;
for(int i = 0; i < v2_num; ++i){
if(get(v2[i].first)==get(v2[i].second)) {
flag = false;
break;
}
}
if(flag){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
//不要忘记清空
mp.clear();
v1.clear();
v2.clear();
}
return 0;
}