以下是一些示例:
输入:n = 3并且0的边缘已经着色。 输出= 4:因为我们可以将所有边缘涂成蓝色,或者只将其中之一涂成蓝色,其余的涂成红色。
输入n = 4,并且4个边缘已经着色
1 2蓝色
2 3蓝色
3 4红色
4 1红色
output = 1:因为着色剩余边缘的唯一方法如下:
1 3蓝色
2 4红色
实际上,我对这种问题的理想数据结构一无所知,我需要您的一些帮助
答案 0 :(得分:3)
这是线性时间算法。
首先,请注意,有效着色的每个周期都包含偶数个红色边缘(我将其保留为练习)。给定生成树的颜色,仅存在一个有效的补全。唯一性很容易证明,因为不在树中的每个边缘的颜色由与之形成循环的树边缘的颜色的奇偶性决定。我将保留有效性作为另一项练习(时间紧迫,对不起)。
该算法是,使用深度优先搜索来查找给定边缘的生成林,并存储每个节点与其树根之间的边缘颜色奇偶校验。有了这些数据,我们就可以验证不在森林中的每个边缘的给定颜色。如果有任何错误,则着色为0。否则,将有2 ^(树数减去一)着色。