给定一个具有红色和蓝色边的图G和一个常数K ,设计一个确定性的线性时间算法,该算法找到G的生成树,其中恰好有K个红色边(False
如果这样的生成树不存在,则返回)。
到目前为止我们做了什么:
让每条红色边的权重为 -1,每条蓝色边的权重为 0。
找到最小生成树(使用标准线性时间算法)。因此,我们有一个权重最小的生成树T,这意味着我们使用了尽可能多的红色边,因为红色边只会降低权重。
如果T中有少于K个红色边,我们返回。False
如果正好有K个红色边,我们就完成了,T就是答案。
如果有超过K个红色边缘,我们需要将它们替换为蓝色边缘。
这是我们的问题,我们如何在线性时间内做到这一点?
添加的每个蓝色边缘都会创建一个循环,因此从循环中删除一个红色边缘将起作用,但我们如何才能以这种方式实现线性?这甚至是一个好方法吗?