bzoj1083题解

Posted Special Containment Procedures

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1083题解相关的知识,希望对你有一定的参考价值。

【题意分析】

  给你一张无向图,求其最小瓶颈生成树的值。

【解题思路】

  有一个很显然的定理:任意一张无向图的最小生成树即为最小瓶颈生成树。所以求最小生成树的时候取边权的最大值即可。

  或者可以修改Dijkstra算法,dis[i]表示当前i离最小瓶颈生成树的最小瓶颈值,也可以证明是具有最优子结构的。

  复杂度最低O(nlog2n)。

【参考程序】

技术分享
 1 #pragma GCC optimize(2)
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 #define REP(i,low,high) for(register int i=(low);i<=(high);i++)
 6 using namespace std;
 7 template<typename T> inline bool getmin(T &tar,const T &pat) {return pat<tar?tar=pat,1:0;}
 8 template<typename T> inline bool getmax(T &tar,const T &pat) {return pat>tar?tar=pat,1:0;}
 9 bool usd[310]; int n,m,dst[310],edg[310][310];
10 int main()
11 {
12     memset(dst,0x7f,sizeof dst),memset(edg,0x7f,sizeof edg),memset(usd,0,sizeof usd),dst[1]=0;
13     for(scanf("%d%d",&n,&m);m--;) {int u,v,w; scanf("%d%d%d",&u,&v,&w); edg[u][v]=edg[v][u]=w;}
14     REP(times,1,n)
15     {
16         int i=0; REP(j,1,n) if(!usd[j]&&dst[j]<dst[i]) i=j; usd[i]=1;
17         REP(j,1,n) if(!usd[j]) getmin(dst[j],max(dst[i],edg[i][j]));
18     }
19     int ans=0; REP(i,1,n) getmax(ans,dst[i]);
20     return printf("%d %d\n",n-1,ans),0;
21 }
View Code

 

以上是关于bzoj1083题解的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1083: [SCOI2005]繁忙的都市(最小生成树)

bzoj 1083 繁忙的都市

BZOJ 1083: [SCOI2005]繁忙的都市 裸的最小生成树

bzoj 1083: [SCOI2005]繁忙的都市 (最小生成树)

BZOJ 1083: [SCOI2005]繁忙的都市

bzoj 1083: [SCOI2005]繁忙的都市