Kruskal最小生成树模板

Kruskal最小生成树模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<bits/stdc++.h>
using namespace std;
int n,m,f[5001],ans,t;
struct s{
int u,v,w;
}e[200001];
bool cmp(s a, s b){
return a.w<b.w;
}
int find(int find_x){
return (f[find_x]==find_x)?(find_x):(f[find_x]=find(f[find_x]));
}
int main(){
cin>>n>>m;
for(int i=0;i<=n;i++)
f[i]=i;
for(int i=0;i<m;i++)
cin>>e[i].u>>e[i].v>>e[i].w;
sort(e,e+m,cmp);
for(int i=0;i<m;i++){
int a=find(e[i].u);
int b=find(e[i].v);
if(f[a]!=f[b]){
f[a]=b;
ans+=e[i].w;
t++;
}
}
if(t==n-1)
cout<<ans;
else
cout<<"orz";
return 0;
}