#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define N 510
int pre[N];
class edge{
public:
int u, v, value;
};
bool cmp(const edge& a, const edge& b) {
return a.value < b.value;
}
vector<edge> v;
int unionsearch(int x) {
return pre[x] = pre[x] == x ? x : unionsearch(pre[x]);
}
bool join(int u, int v) {
int root1 = unionsearch(u);
int root2 = unionsearch(v);
if (root1 == root2)
return false;
pre[root1] = root2;
return true;
}
int main() {
int i, num_vertex, num_edge, local_edge, ans;
edge tmp;
v.clear();
cin >> num_vertex >> num_edge;
for (i = 1; i <= num_vertex; i++)
pre[i] = i;
ans = local_edge = 0;
for (i = 0; i < num_edge; i++) {
cin >> tmp.u >> tmp.v >> tmp.value;
v.push_back(tmp);
}
sort(v.begin(), v.end(), cmp);
for (i = 0; i < num_edge && local_edge < num_vertex - 1; i++)
if (join(v[i].u, v[i].v)) {
local_edge++;
ans += v[i].value;
}
cout << ans << endl;
return 0;
}
Kruskal算法
最新推荐文章于 2025-03-07 11:48:04 发布