我的代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 10005;
struct edge {
int p1, p2;
int weight;
friend istream& operator>>(istream& is, edge& e) {
is >> e.p1 >> e.p2 >> e.weight;
return is;
}
};
bool cmp(edge a, edge b) {
return a.weight < b.weight;
}
edge arr[N];
int prt[N];
int n, m;
int root(int u) {
if (prt[u] == u)
return prt[u];
prt[u] = root(prt[u]);
return prt[u];
}
bool merge(int u, int v) {
int r1 = root(u), r2 = root(v);
if (r1 == r2) return false;
prt[r1] = r2;
return true;
}
bool kruskal(long long& sum) {
int cnt = 0;
for (int i = 1; i <= n; i++) {
if (cnt == n - 1)
return true;
if (merge(arr[i].p1, arr[i].p2)) {
sum += arr[i].weight;
cnt++;
}
}
return false;
}
int main() {
cin >> n >> m;
for (int i = 1; i <= m; i++) {
cin >> arr[i];
}
for (int i = 1; i <= n; i++)
prt[i] = i;
sort(arr + 1, arr + n + 1, cmp);
long long sum = 0;
if (kruskal(sum)) {
cout << sum << endl;
} else
puts("orz");
return 0;
}