定义
见百度百科,下面是我自己的理解,就是所有的生成树中最大边权最小的那一棵树,为啥叫瓶颈生成树呢?瓶颈就是关键的限制,在生成树的要求边权最小,关键取决于边权最大的那条边。
定理
最小生成树是瓶颈生成树的充分非必要条件。
即:最小生成树一定是瓶颈生成树,但瓶颈生成树不一定是最小生成树。
这个定理于是就给我们了一种求解瓶颈生成树的思路:利用求最小生成树的算法来求。
这里结合 k r u s k a l kruskal kruskal算法会更容易理解。
因为 k r u s k a l kruskal kruskal是通过并查集+对边排序,当边数 = n − 1 =n-1 =n−1时即为最小生成树,此时最第 n − 1 n-1 n−1条边就是瓶颈生成树的最大边权,满足最大边权最小。
这个定理证明,可以用反证法,见百度百科。
扩展
有瓶颈生成树,也就有最小瓶颈路:给定起点 s s s,终点 t t t,求所有路径中最大边权最小的一条路径。
每当我们看到最大值最小的时候,我们就自然想到二分,事实上这个问题是可以用二分解决的,当然用定理也可以解决。
法1(定理):
利用
k
r
u
s
k
a
l
kruskal
kruskal对边排序,当
s
,
t
s,t
s,t连通时的边就是答案。
法2(二分):
可以二分答案,然后判断 s , t s,t s,t是否连通即可,判断连通用 b f s bfs bfs或者 d f s dfs dfs都可。
法3(最短路):
将最短路改一下,维护最大边权的最小值。
我的一个习题代码
习题2瓶颈生成树