(a) 正如我在评论中提到的 (V', E' ∩ T) 可能包含多个组件。通常,G' 的最小生成树将需要更多边。问题是在 E' ∩ T 中是否已经给出了一些可以不用的边。因此,我们可以将问题改写为 G' 存在最小生成树 (V', T'),使得 E' ∩ T ⊂ T'。
这是使用Kruskal 算法的证明及其正确性证明。Kruskal 算法中按权重枚举边不是确定性的。尽管边是按权重排序的,但在权重相等的边上的枚举是不确定的。然而,对于每棵生成树,都有一些边的单调枚举产生最小生成树 (V,T)。令 E_x 为权重为 x 的所有边的集合。对于排序,选择任何顺序,使得 E_x ∩ T 中的所有边都排在 E_x \ T 中的边之前。E_x ∩ T 中的所有边都不会在 Kruskal 算法中检查它们的步骤中形成循环,因为它们出现在最终的最小生成树。它们出现的顺序也无关紧要,因为顺序不会改变循环的不存在。然后,E_x\T 中的所有边都被丢弃,因为它们会形成循环,
对于下一步,我们再次在 G' 上运行 Kruskal 算法,使用的排序将产生我们给定的 G 的最小生成树。将此树称为 (V', T')。这里的关键属性是,当我们这样做时,E' ∩ T 中的所有边都在任何其他边之前添加。相反,假设某个边 t ∈ E' ∩ T 在 G' 上的运行中会被拒绝,因为它形成了一个循环。这意味着某个链 C 已经在计算 (V,T) 时边 t 是第一个连接的两个组件之间形成了连接。如果是这样,同一条链将在原始运行中连接这些组件,而他们没有。现在考虑在将 E_x ∩ T 中的边添加到进行中的树之后立即在 G' 上的 Kruskal 算法的状态。克鲁斯卡尔的任何东西
(b) 这部分主要是 (a) 部分的推论,即观察到边集 E' ∩ T 在 Kruskal 算法运行的某个点始终是有效状态。因此,如果算法在该点完成,即边集已用尽,则 E' ∩ T 恰好是最小生成树的边。条件是算法在处于这种状态时结束,因此当 (V', E' ∩ T) 连接时,Kruskal 算法终止并且 (V', E' ∩ T) 是最小生成树。相反,如果 (V', E' ∩ T) 是最小生成树,那么它必然是连通的。