这里是kruskal做法
当然prim也可以,至于prim和kruskal的比较:
Prim在稠密图中比Kruskal优,Kruskal在稀疏图中比Prim优。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int fa[200001]; 4 struct edge{ 5 int u; 6 int v; 7 int w; 8 }e[200001]; 9 int cmp(edge a,edge b) 10 { 11 return a.w<b.w; 12 } 13 int find(int x) 14 { 15 return fa[x]==x?x:fa[x]=find(fa[x]); 16 } 17 long long cnt=0; 18 long long ans=0; 19 long long n,m; 20 int main() 21 { 22 23 cin>>n>>m; 24 for(int i=1;i<=n;i++) 25 fa[i]=i; 26 27 for(int i=1;i<=m;i++) 28 cin>>e[i].u>>e[i].v>>e[i].w; 29 30 sort(e+1,e+1+m,cmp); 31 32 for(int i=1;i<=m;i++) 33 { 34 if(cnt==n-1) 35 break; 36 int x=find(e[i].u); 37 int y=find(e[i].v); 38 if(x!=y) 39 { 40 ans+=e[i].w; 41 fa[y]=x; 42 cnt++; 43 } 44 45 46 } 47 if(cnt!=n-1) 48 { 49 cout<<"orz"; 50 return 0; 51 } 52 cout<<ans; 53 return 0; 54 }