【luogu P3366 最小生成樹】 模板
阿新 • • 發佈:2018-03-04
break pos clas color nbsp main str long sin
這裏是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 } 13int 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 }
【luogu P3366 最小生成樹】 模板