rt,70分求助
#include <bits/stdc++.h>
#define N 1000010
using namespace std;
int T;
bool flag = true;
int n, tot = 0, fa[N], b[N];
struct data {int x, y, e;}a[N];
bool cmp(data a, data b) {
return a.e > b.e;
}
int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
int merge(int x,int y) {
fa[find(x)] = find(y);
}
void init() {
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(fa, 0, sizeof(fa));
for(int i = 1; i <= n; ++i) fa[i] = i;
tot = -1;
flag = true;
}
int main() {
scanf("%d", &T);
while(T--) {
scanf("%d", &n);
init();
for(int i = 1; i <= n; ++i) {
scanf("%d %d %d", &a[i].x, &a[i].y, &a[i].e);
b[++tot] = a[i].x;
b[++tot] = a[i].y;
}
sort(b , b + tot);
tot = unique(b, b + tot) - b;
for(int i = 1;i <= n; ++ i) {
a[i].x = lower_bound(b, b + tot, a[i].x) - b;
a[i].y = lower_bound(b, b + tot, a[i].y) - b;
}
sort(a + 1,a + 1 + n, cmp);
for(int i = 1;i <= n; ++i) {
int tmp1 = find(a[i].x);
int tmp2 = find(a[i].y);
if(a[i].e) {
fa[tmp1] = tmp2;
}else if(tmp1 == tmp2){
printf("NO\n");
flag = false;
break;
}
}
if(flag) printf("YES\n");
}
return 0;
}