生成树_Part one

次小生成树

非严格次小生成树

定义

无向图的所有生成树中,边权和 大于等于 最小生成树边权和的生成树。
参考图:

可以想到一个显然的思路,\(dfs\) 求出所有生成树,然后选出比最小生成树权值小的第一个生成树。
但是上述方法最坏情况的时间复杂度是 \(O( C^{n-1}_m )\)\(n\) 表示点的个数,\(m\) 表示边的个数,所以一定是不对的。

可以证明,在每条边权值都不相同的条件下,次小生成树一定与最小生成树相差一条边,因为如果有两条边不相同,比只有一条边不相同的生成树权值和更小。
所以我们能想到一个新的思路,考虑换边。
求出最小生成树,设生成树权值和为 \(sum\)
遍历每一条没有被选过的边 \(e = (u, v, w), e ∈ G\),添加到已生成树中,可以证明每次添加一条边都会形成一个环,想到最小生成树性质,故可以删掉环上除 \(e\) 之外的边的最大值,记录本次答案为 \(ans[i]\)
最终答案为 \(max(ans[i]), i <= m - n + 1\)
对于记录 \(u,v\) 路径上最大值,可以使用倍增或树剖解决。

严格次小生成树

定义

无向图的所有生成树中,边权和 大于 最小生成树边权和的生成树。

与次小生成树相似,我们可以维护边权最大值和次大值。

边为 \(m\),查询复杂度 \(log(m)\),最坏复杂度 \(O(mlogm)\)

posted @ 2022-08-04 10:30  zcxxxxx  阅读(18)  评论(0编辑  收藏  举报