评测记录
#include<bits/stdc++.h>
using namespace std;
int t, n;
struct edge {
int u, v, f;
} e[300010];
int fa[300010];
int find(int x) {
return fa[x]==x?x:fa[x]=find(fa[x]);
}
void merge(int x, int y) {
int fx=find(x), fy=find(y);
fa[fx]=fy;
}
int main() {
cin>>t;
while (t--) {
cin>>n;
int cnt=0;
map<int, int> mp;
for (int i=1; i<=n; i++) {
cin>>e[i].u>>e[i].v>>e[i].f;
if (!mp[e[i].u]) mp[e[i].u]=e[i].u=++cnt;
else e[i].u=mp[e[i].u];
if (!mp[e[i].v]) mp[e[i].v]=e[i].v=++cnt;
else e[i].v=mp[e[i].v];
}
for (int i=1; i<=300000; i++)
fa[i]=i;
for (int i=1; i<=n; i++) {
if (e[i].f==1) merge(e[i].u, e[i].v);
}
bool flag=1;
for (int i=1; i<=n; i++) {
if (e[i].f==0&&find(e[i].u)==find(e[i].v))
flag=0;
}
if (flag) cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}