生成树_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)\)