// 1.坐标太太需要映射(无序即可) // 2.初始化p[N],为n*2; // 3.合并相等的条件 // 4.判断不等的条件,如果在同一集合就标记; #include <bits/stdc++.h> #define int long long #define PII pair<int,int> #define ll long long #define endl '\n' using namespace std; const int N=2e5+10,M=5010; int a[N],b[N],e[N]; int p[N]; int find(int x) { if(x!=p[x]) { p[x]=find(p[x]); } return p[x]; } void solve() { int cnt=0;unordered_map<int,int>mp; auto get_pos=[&](int x) { if(!mp.count(x))mp[x]=++cnt; return mp[x]; }; int n;cin>>n; for(int i=1;i<=n*2;i++)p[i]=i; for(int i=1;i<=n;i++) { cin>>a[i]>>b[i]>>e[i]; a[i]=get_pos(a[i]);b[i]=get_pos(b[i]); } for(int i=1;i<=n;i++) { if(e[i]==1) { int pa=find(a[i]),pb=find(b[i]); if(pa!=pb) { p[pa]=pb; } } } int flag=0; for(int i=1;i<=n;i++) { if(e[i]==0) { int pa=find(a[i]),pb=find(b[i]); if(pa==pb) { flag=1; break; } } } if(flag) cout<<"NO"<<endl; else cout<<"YES"<<endl; } signed main() { cin.tie(0);cout.tie(0); ios::sync_with_stdio(0); int t;cin>>t; while(t--) solve(); return 0; }
12-30
1517
07-07
875
05-09
265
06-01
152
06-09