除了前两点全部MLE,数组开大了?
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int B = 500 + 114;
int a, b;
int fa[B];
int fnd(int x) {
if (fa[x] == x)
return fa[x];
else return fa[x] = fnd(x);
}
struct Edge {
int x, y, w;
bool operator<(const Edge&E)const {
return E.w > w;
}
} edge[B * B / 2];
int idx = 0;
long long ans = 0, k = 0;
int main() {
cin >> a >> b;
if (b == 1) {
cout << a << endl;
return 0;
}
int m;
for (int i = 1; i <= b; i++) fa[i] = i;
for (int i = 1; i <= b; i++) {
for (int j = 1; j <= b; j++) {
cin >> m;
if (j > i && m != 0) {
edge[++idx].w = m;
edge[idx].y = j;
edge[idx].x = i;
}
}
}
sort(edge + 1, edge + idx + 1);
for (int i = 1; i <= idx; i++) {
int x = edge[i].x, y = edge[i].y, w = edge[i].w;
int r1 = fnd(x), r2 = fnd(y);
if (r1 == r2) continue;
k++, fa[r1] = r2;
ans += w;
}
if (k == b - 1) cout << ans + a;
else cout << ans + (b - k)*a;
return 0;
##### }