首页 > 代码库 > 【最小瓶颈生成树】【最小生成树】【kruscal】bzoj1083 [SCOI2005]繁忙的都市
【最小瓶颈生成树】【最小生成树】【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 else19 {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]繁忙的都市
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。