#include <bits/stdc++.h>
using namespace std;
int T, n;
int fa[2000005];
int fr[1000005], to[1000005], type[1000005];
map<int, int> mp; int cnt;
inline int find(int cur){
if(fa[cur] == cur) return cur;
else return fa[cur] = find(fa[cur]);
}
int main(){
scanf("%d", &T);
while(T--){
cnt = 0;
map<int, int> empty; mp = empty;
memset(fa, 0, sizeof(fa));
scanf("%d", &n);
for(int i=1; i<=n; i++){
scanf("%d%d%d", &fr[i], &to[i], &type[i]);
if(!mp[fr[i]]) mp[fr[i]] = ++cnt;
if(!mp[to[i]]) mp[to[i]] = ++cnt;
}
for(int i=1; i<=cnt; i++) fa[i] = i;
int flag = 1;
for(int i=1; i<=n; i++){
if(type[i] == 1){
int fx = find(mp[fr[i]]), fy = find(mp[to[i]]);
if(fx != fy){
fa[fx] = fy;
}
}
}
for(int i=1; i<=n; i++){
if(type[i] == 0){
int fx = find(mp[fr[i]]), fy = find(mp[to[i]]);
if(fx == fy){
flag = 0; break;
}
}
}
if(flag == 1) printf("YES\n");
else printf("NO\n");
}
}
如上代码,时间大概最大的点900ms