标签:algorithm == 初始 return false 模板 str turn 返回
#include <iostream> #include <algorithm> using namespace std; const int maxm=100000; const int maxn=5000; int tot; struct edge{ int u,v,w; }e[maxm*2]; int father[maxn]; void make(int n){ for(int i=0;i<n;i++) //初始化 father[i]=i; //令每个元素的父亲都是元素本身 } int find(int x){ if(x!=father[x]) //若父亲不为本身,则寻找元素x的祖先 father[x]=find(father[x]); //通过寻找元素x父亲的父亲找到祖先 return father[x]; //返回元素x的祖先 } int cmp(edge a,edge b){ return a.w<b.w; } void work(int i){ tot=tot+e[i].w; } bool kruskal(int n,int m){ int cnt=0; make(n); sort(e,e+m,cmp); for(int i=1;i<=m;i++) { int u=e[i].u,v=e[i].v; if(find(u)!=find(v)) { father[find(u)]=find(v); work(i); cnt++; } if(cnt==n-1) break; } if(cnt!=n-1) return false; return true; } int main(){ int N,M; cin>>N>>M; for(int i=1;i<=M;i++){ int X,Y,Z; cin>>X>>Y>>Z; e[i].u=X,e[i].v=Y,e[i].w=Z; } if(kruskal(N,M)) cout<<tot<<endl; else cout<<"orz"<<endl; return 0; }
标签:algorithm == 初始 return false 模板 str turn 返回
原文地址:https://www.cnblogs.com/kohano/p/11745680.html