问题:给定一棵树 T = (V,E) 。添加最小数量的边,以便即使从新创建的图形中删除一条边,仍然有从任何顶点到任何其他顶点的路径。
我相信问题可以简化为将图的最小切割的大小从当前的最小切割 1 增加到 2。但是这样做的有效算法是什么。
问题:给定一棵树 T = (V,E) 。添加最小数量的边,以便即使从新创建的图形中删除一条边,仍然有从任何顶点到任何其他顶点的路径。
我相信问题可以简化为将图的最小切割的大小从当前的最小切割 1 增加到 2。但是这样做的有效算法是什么。
这是算法,可以解决任何无向图的这个问题。经过一些简化后,它可以应用于树(不需要第 1 步)。
第 4 步保证在第 6 步之后我们不会得到一个新的不需要的叶子,这是优化的关键。
Evgeny 的解决方案非常好,但这里有一个更简单的解决方案,适用于 Trees,其正确性很容易看出。
让我们L
成为树的(原始)叶子T
。设n
是树中的任何节点,使得通过删除获得的每个子树n
最多具有|L|/2
原始叶子。请注意,总是可以找到这样的节点n
。
令T
1 , T
2 , .. , T
k为移除 得到的子树n
。每个原始叶子 (in L
) 都存在于其中一个T
i中。从原始叶子构造最大不相交对,约束条件是任何对中的两个原始叶子属于不同的子树。(这在概念上与在完整的 k 部分图中构建最大匹配相同,其部分是子树中存在的原始叶子)。
如果|L|
是偶数,那么每个原始叶子都将出现在某个对中,并且添加与这些对中的每一个相对应的边将使结果图 2 连通。所以在这种情况下我们需要添加|L|/2
边。
如果|L|
是奇数,则一个原始叶子不会配对,因此我们可以将此叶子连接到存在于不同子树中的任意原始叶子。在这种情况下,我们需要添加(|L|+1)/2
边。