最小生成树
Posted kyledeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最小生成树相关的知识,希望对你有一定的参考价值。
#include<bits/stdc++.h> using namespace std; int n,m; int f[5005]; void clean() { for(int i=1;i<=n;i++) { f[i]=i; } }//初始化并查集 int mf(int v) { if(f[v]==v) return v; else { f[v]=mf(f[v]); return f[v]; } }//找爹 void mer(int a,int b) { int af=mf(a); int bf=mf(b); if(af!=bf) { f[bf]=af; } }//合并 struct make_edge { int a; int b; int w; };//每条边 make_edge edge[200005]; bool cmp(make_edge a,make_edge b) { return a.w<b.w; } int main() { cin>>n>>m; clean(); for(int i=1;i<=m;i++) { int a,b,w; cin>>a>>b>>w; edge[i].a=a; edge[i].b=b; edge[i].w=w; edge[i].a=b; edge[i].b=a; edge[i].w=w; } sort(edge+1,edge+m+1,cmp);//排序 int count=0;//边数 int sum=0; for(int i=1;i<=m;i++) { if(mf(edge[i].a)==mf(edge[i].b)) continue; else { mer(edge[i].a,edge[i].b); sum+=edge[i].w; count++; } if(count==n-1) { break; } } if(count<n-1) cout<<"orz"<<endl; else cout<<sum<<endl; return 0; }
以上是关于最小生成树的主要内容,如果未能解决你的问题,请参考以下文章