//比赛时没有人提醒你ans要用long long
#include<bits/stdc++.h>
using namespace std;
int n, m, tot;
long long ans;
int f[100010];
struct node{
int u, v, c;
} edge[100010];
int find(int x){
if(f[x] == x) return x;
return f[x] = find(f[x]);
}
bool cmp(node x, node y){
return x.c < y.c;
}
void kruskal(){
sort(edge+1, edge+m+1, cmp);
for(int i = 1; i <= n; i++) f[i] = i;
for(int i = 1; i <= m; i++){
int fx = find(edge[i].u);
int fy = find(edge[i].v);
if(fx == fy) continue;
ans += edge[i].c;
f[fx] = fy;
}
}
int main(){
cin >> n >> m;
for(int i = 1; i <= m; i++){
int a, b, c;
cin >> a >> b >> c;
edge[++tot].u = a;
edge[tot].v = b;
edge[tot].c = c;
}
kruskal();
cout << ans << endl;
return 0;
}
CODEVS 1231 最优布线问题
最新推荐文章于 2024-06-05 16:46:13 发布