2,7,9,10T了
查看原帖
2,7,9,10T了
275001
libmwlmgrimpl楼主2022/8/22 21:48

RT

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <cstring>
#include <queue>
using namespace std;

long t, n, p, q, f[1000005], m[3000005];

struct node {
    long a, b, e;
} k[1000005];

bool cmp(node a, node b) {
    return a.e > b.e;
}

long find(long x) {
    if (x == f[x]) return x;
    return f[x] = find(f[x]);
}

int main() {
    scanf("%ld", &t);
    while (t--) {
        q = -1, p = 1;
        memset(m, 0, sizeof(m));
        memset(k, 0, sizeof(k));
        memset(f, 0, sizeof(f));
        scanf("%ld", &n);
        for (long i = 1; i <= n; i++) scanf("%ld %ld %ld", &k[i].a, &k[i].b, &k[i].e);
        for (long i = 1; i <= n; i++) m[++q] = k[i].a;
        for (long i = 1; i <= n; i++) m[++q] = k[i].b;
        sort(m, m + q);
        for (long i = 1; i <= n; i++) k[i].a = lower_bound(m, unique(m, m + q), k[i].a) - m;
        for (long i = 1; i <= n; i++) k[i].b = lower_bound(m, unique(m, m + q), k[i].b) - m;
        for (long i = 1; i <= unique(m, m + q) - m; i++) f[i] = i;
        sort(k + 1, k + n + 1, cmp);
        for (long i = 1; i <= n; i++) {
            long u = find(k[i].a), v = find(k[i].b);
            if (k[i].e) f[u] = v;
            else if (u == v) {
                printf("NO\n");
                p = 0;
                break;
            }
        }
        if (p) printf("YES\n");
    }
    return 0;
}


2022/8/22 21:48
加载中...