蒟蒻84分
向大佬们求助
#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<algorithm>
using namespace std;
struct Edge{
int from,to,val;
}e[200010*2];
bool cmp(const Edge &a, const Edge &b){
return a.val < b.val;
}
int fa[5010];
int find(int x){
return fa[x] == x ? fa[x] : fa[x] = find(fa[x]);
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for (int i = 1; i <= m; ++i){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
e[i].from = x;
e[i].to = y;
e[i].val = z;
}
for (int i = 1; i <= n; i++) fa[i] = i;
sort(e+1, e + m + 1, cmp);
long long cnt = 0, ans = 0;
for (int i = 1; cnt < n; i++){
int fx = find(e[i].from);
int fy = find(e[i].to);
if (fx == fy) continue;
else{
ans += e[i].val;
cnt++;
fa[fx] = fy;
}
}
printf("%lld",ans);
return 0;
}