本文不会使用拟阵相关知识。
引理 1
对于一张图 ,以及她的两颗生成树 ,对于任意一条边 ,必定存在一条边 ,满足 和 都是 的生成树。
证明:
先考虑第二个条件,显然,把 加入 后会与 中 到 的路径 形成一个环,而 一定属于 。
然后考虑第一个条件,将 从 中去掉之后会形成两个连通块,而因为 连接了两个连通块,所以 至少有一条边会横跨两个连通块,显然这样的边是合法的。
引理 2
对于任意一颗最小生成树 ,她的第 小的边是所有生成树里最小的。
考虑另一颗生成树 ,我们找到引理 1 中的 和 ,由于 是最小生成树,所以 ,然后将 变为 。
然后不断执行这个操作直到最终 变为 ,由于操作中只会把大的边变小,所以 里第 小的边都大于等 中的第 小。 由此可知,所有最小生成树的边权的集合都相同。
引理 3
对于所有的最小生成树,边权小于 的所有边的连通性是一样的,很明显如果连通性不一样,就可以并起来,那么第 小的边就不是所有生成树中最小的,与引理 2 矛盾。
根据引理 3,很明显 Kruskal 的做法就是正确的。
结论:严格次小生成树可以通过任意一颗最小生成树删掉一条边,再加入一条边而生成。
证明:
考虑一颗最小生成树 以及满足 最大的严格次小生成树 。
所有的边对 (含义同引理 1),若 ,我们可以通过把 中的 替换为 ,而找到一颗 更大的严格次小生成树,与条件矛盾。
因此 ,那么把 中 替换为 就可以变为 。
对于一个图,对于所有的 ,求出 的度数为 的最小生成树权值。
我们令 表示 的度数为 的最小生成树。
那么有: 可以通过 删去一条边,加上一条边得到。
证明与严格次小生成树类似,就懒得写了。
那么我们就可以 从大到小用可并堆维护。