1. 程式人生 > >【luogu P3366 最小生成樹】 模板

【luogu P3366 最小生成樹】 模板

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 }
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 }

【luogu P3366 最小生成樹】 模板