【luogu P3366 最小生成树】 模板

这里是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 }

 

posted @ 2018-03-04 11:29  Misaka_Azusa  阅读(166)  评论(0编辑  收藏  举报
Live2D