#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int pre[1005];
class edge {
public:
int a, b, cost;
bool operator<(const edge b)const {
return cost < b.cost;
}
};
bool compare(const edge a, const edge b) {
return a.cost < b.cost;
}
vector<edge> all;
int findroot(int i) {
if (pre[i] != i) pre[i] = findroot(pre[i]);
return pre[i];
}
void addv(int i, int j) {
int x = findroot(i);
int y = findroot(j);
pre[x] = pre[y] = min(x, y);
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; ++i)
pre[i] = i;
edge a;
while (m--) {
cin >> a.a >> a.b >> a.cost;
all.push_back(a);
}
sort(all.begin(), all.end(),compare);
int re = 0, cnt = 1;
for (int i = 0; i < all.size(); ++i) {
if (findroot(all[i].a) != findroot(all[i].b)) {
addv(all[i].a, all[i].b);
re += all[i].cost;
if (++cnt == n) break;
}
}
cout << re << endl;
}
ccf 201412-4 最优灌溉 100
最新推荐文章于 2020-09-05 11:59:54 发布