WA+MLE 0pts求助!
查看原帖
WA+MLE 0pts求助!
312820
Chinshyo楼主2022/7/19 22:24

我不太理解为什么会MLE。我的数组大小都在范围内,求助为什么会炸。

#include<bits/stdc++.h>
using namespace std;

const int MaxN = 100005;

struct edge {
    int x, y, e;
} input[MaxN + 5];
int a[2 * MaxN + 10], fa[2 * MaxN + 10];

bool cmp (edge e1, edge e2) {
    return e1.e > e2.e;
}

int find(int x) {
    if(fa[x] == x) return x;
    else return fa[x] = find(fa[x]);
}

int main() {
    int t;
    scanf("%d", &t);
    while(t--) {
        int n;
        scanf("%d", &n);
        int cnt = 0;
        for(int i = 1; i <= n; i++) {
            edge _i;
            scanf("%d%d%d", &_i.x, &_i.y, &_i.e);
            input[i] = _i;
            a[++cnt] = _i.x;
            a[++cnt] = _i.y;
        }
        sort(a + 1, a + cnt + 1);
        int num = unique(a + 1, a + cnt + 1) - a;
        
        for(int i = 1; i <= n; i++) {
            input[i].x = lower_bound(a + 1, a + num + 1, input[i].x) - a;
            input[i].y = lower_bound(a + 1, a + num + 1, input[i].y) - a;
        }

        for(int i = 1; i <= num; i++) fa[i] = i;
        
        sort(input + 1, input + n + 1, cmp);

        bool flag = true;
        for(int i = 1; i <= n; i++) {
            int x = input[i].x, y = input[i].y;
            if(input[i].e == 1) {
                fa[x] = y;
            } else {
                if(find(x) == find(y)) {
                    puts("NO\n");
                    flag = false;
                    break;
                }
            }
        }
        if(flag) puts("YES\n");
    }
    return 0;
}
2022/7/19 22:24
加载中...