P3366 kruskal模板题
Posted kohano
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3366 kruskal模板题相关的知识,希望对你有一定的参考价值。
#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; }
以上是关于P3366 kruskal模板题的主要内容,如果未能解决你的问题,请参考以下文章
P3366 模板最小生成树 (贪心+并查集,kruskal)
P3366 模板最小生成树 (贪心+并查集,kruskal)