我不太理解为什么会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;
}