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

【最小瓶颈生成树】【最小生成树】【kruscal】bzoj1083 [SCOI2005]繁忙的都市

时间:2014-11-22 18:44:16      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   sp   for   数据   on   div   

本意是求最小瓶颈生成树,但是我们可以证明:最小生成树也是最小瓶颈生成树(其实我不会)。数据范围很小,暴力kruscal即可。

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 struct Edge{int u,v,w;void Read(){scanf("%d%d%d",&u,&v,&w);}}edges[10001];
 5 bool operator < (const Edge &a,const Edge &b){return a.w<b.w;}
 6 int n,m,fa[301],rank[301],tot;
 7 void init(){for(int i=1;i<=n;i++)fa[i]=i;}
 8 int findroot(int x)
 9 {
10     if(x==fa[x]) return x;
11     int rt=findroot(fa[x]);
12     fa[x]=rt;
13     return rt;
14 }
15 void Union(const int &U,const int &V)
16 {
17     if(rank[V]<rank[U]) fa[V]=U;
18     else
19       {
20           fa[U]=V;
21           if(rank[U]==rank[V]) ++rank[U];
22       }
23 }
24 int main()
25 {
26     scanf("%d%d",&n,&m); init();
27     for(int i=1;i<=m;++i) edges[i].Read();
28     sort(edges+1,edges+m+1);
29     for(int i=1;i<=m;i++)
30       {
31           int f1=findroot(edges[i].u),f2=findroot(edges[i].v);
32           if(f1!=f2)
33             {
34                 Union(f1,f2);
35                 tot++;
36                 if(tot==n-1)
37                   {
38                       printf("%d %d\n",n-1,edges[i].w);
39                       return 0;
40                   }
41             }
42       }
43     return 0;
44 }

【最小瓶颈生成树】【最小生成树】【kruscal】bzoj1083 [SCOI2005]繁忙的都市

标签:style   blog   io   color   sp   for   数据   on   div   

原文地址:http://www.cnblogs.com/autsky-jadek/p/4115389.html

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