求助
查看原帖
求助
469309
凤年楼主2023/1/9 20:39

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;
} 
2023/1/9 20:39
加载中...