码迷,mamicode.com
首页 > 其他好文 > 详细

POJ2377最大生成树

时间:2016-08-09 09:23:39      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

题意:求最大生成树

分析:把边权值变成负值,最后取绝对值,注意最后的判断,如果生成树的边的数目小于(顶点数-1)则表示不能构成生成树

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <string>
 5 #include <vector>
 6 #include <algorithm>
 7 #include <set>
 8 #include <map>
 9 #include <bitset>
10 #include <cmath>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 const int maxn=20020;
15 int  par[maxn],rankl[maxn];
16 
17 void init(int n)
18 {
19     for(int i=0;i<=n;i++)
20     {
21         par[i]=i;
22         rankl[i]=0;
23     }
24 }
25 int findl(int x)
26 {
27     if(par[x]==x)
28         return x;
29     else
30         return par[x]=findl(par[x]);
31 }
32 void unite(int x,int y)
33 {
34     x=findl(x);
35     y=findl(y);
36     if(x==y)  return;
37     if(rankl[x]<rankl[y]){
38         par[x]=y;
39     }else{
40         par[y]=x;
41         if(rankl[x]==rankl[y])   rankl[x]++;
42     }
43 }
44 bool same(int x,int y)
45 {
46     return findl(x)==findl(y);
47 }
48 int n,m;
49 struct edge{
50     int u,v,cost;
51 };
52 bool cmp(const edge e1,const edge e2){
53     return e1.cost<e2.cost;
54 }
55 edge es[maxn];
56 int ans;
57 int kruskal()
58 {
59     sort(es,es+m+1,cmp);
60     init(n);
61     int res=0;
62     for(int i=0;i<m;i++){
63         edge e=es[i];
64         if(!same(e.u,e.v)){
65             unite(e.u,e.v);
66             res+=e.cost;
67             ans++;
68         }
69     }
70     return res;
71 }
72 int main()
73 {
74     while(cin>>n>>m)
75     {
76         for(int i=0;i<m;i++)
77         {
78             int a,b,c;
79             scanf("%d%d%d",&a,&b,&c);
80             es[i].u=a,es[i].v=b,es[i].cost=-c;
81         }
82         ans=0;
83         int cnt=0-kruskal();
84     //    cout<<ans<<endl;
85         if(ans==n-1)
86         cout<<cnt<<endl;
87         else
88         cout<<"-1"<<endl;
89     }
90     return 0;
91 }
View Code

 

POJ2377最大生成树

标签:

原文地址:http://www.cnblogs.com/wolf940509/p/5751684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!