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

本意是求最小瓶颈生成树,但是我们可以证明:最小生成树也是最小瓶颈生成树(其实我不会)。数据范围很小,暴力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 }
posted @ 2014-11-22 17:11  AutSky_JadeK  阅读(155)  评论(0编辑  收藏
TVアニメ「Charlotte(シャーロット)」公式サイト TVアニメ「Charlotte(シャーロット)」公式サイト