模板题贴代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 50005;
struct edge{
int u;
int v;
int w;
}e[maxn];
int f[maxn];
int n,m;
bool cmp(edge a ,edge b){
return a.w < b.w;
}
void init(){
for(int i = 0; i <= n; i ++)
f[i] = i;
}
int find (int x){
printf("!!");
if(x == f[x]) return x;
else return f[x] = find(f[x]);
}
int Union(int a,int b){
int fa = find(a);
int fb = find(b);
if(fa > fb)
f[a] = b;
else
f[b] = a;
}
int kru(int nn){
int res = 0 ;
for(int i = 0 ; i < m ; i ++){
if(find(e[i].u) != find(e[i].v)){
Union(e[i].u,e[i].v);
res+=e[i].w;
nn--;
if(nn == 1)
return res ;
}
}
}
int main(){
cin >> n >> m;
for(int i = 0 ; i < m ; i ++){
cin >> e[i].u >> e[i].v >> e[i].w;
}
sort(e,e+m,cmp);
init();
int ans = kru(n);
cout << ans;
}