这道题用 Kruskal 一直 MLE ,思路也没有错,为什么
#include <cstdio>
#include <iostream>
#include <algorithm>
#define N 200020
#define M 500020
using namespace std;
struct edge {
int u, v;
int w;
} e[M];
int fa[N];
int ans = 0, n, m;
bool cmp(edge a, edge b) {
return a.w < b.w;
}
int found(int x) {
return fa[x] == x ? x : fa[x] == found(fa[x]);
}
int main() {
cin >> n >> m;
for (int i = 1; i <= m; i++)
scanf("%d %d %d", &e[i].u, &e[i].v, &e[i].w);
sort(e + 1, e + m + 1, cmp);
for (int i = 1; i <= n; i++)
fa[i] = i;
int k = 0;
int u, v, f, t;
for (int i = 1; i <= m; i++) {
if (k == n - 1)
break;
u = e[i].u, v = e[i].v;
if (found(u) != found(v)) {
k++;
ans += e[i].w;
f = found(u), t = found(v);
fa[f] = t;
}
}
printf("%d\n", ans);
return 0;
}