当前位置: 首页 > 知识库问答 >
问题:

在线性时间内由红/蓝着色的图中精确使用k条红边求生成树

雷飞虎
2023-03-14

给定一个具有红边和蓝边且常数K的图G,设计一个确定性的线性时间算法,该算法可以找到G的一个恰好具有K条红边的生成树(或者,如果这样的生成树不存在,则返回false)。

我们迄今所做的:

让每个红边的权重为-1,每个蓝边的权重为0。

找到最小生成树(使用标准线性时间算法)。所以,我们有一个最小权重的生成树T,这意味着我们使用了尽可能多的红边,因为红边只会减少权重。

如果T中的红色边少于K条,则返回false

如果正好有K个红边,我们就大功告成了,T是答案。

这就是我们的问题,我们如何在线性时间内做到这一点?

每增加一个蓝边就会产生一个循环,因此从循环中移除一个红边就会起作用,但我们如何才能以这种方式保证线性度呢?这是一个好方法吗?

共有1个答案

壤驷瑾瑜
2023-03-14

您可以使用两次Prim算法在线性时间内完成此操作。(通常Prim的算法不是线性时间,但当你只有两种类型的边时,你不需要花时间排序边)。

在第一次通过时,在红色边缘之前跟随蓝色边缘,并标记任何你被迫采取的红色边缘。

如果你在这个过程中标记了C条边,那么我们就知道在任何生成树解中至少要有C条红边,所以如果C>K,那是不可能的。

假设我们在第一遍中找到了C(

在第二遍中,在蓝之前跟随红边,直到附加红边的总数达到K-C。在第二次传球中,你也可以跟随第一次传球中标记的红边(这些红边不计入你的总数)。

如果你的额外红边没有达到K-C,那么这是不可能的。

 类似资料:
  • 做一个Sylvain Ratabouil Android NDK(第二版)的例子,从相机获得图像预览,并对其进行本地处理,从YUV转换为RGB,并对其应用滤色器。 代码非常简单,问题发生在传递给这个函数的过滤器中: 目标是对ImageView的引用 源是帧预览数据 过滤器是彩色过滤器 *为红色图像用0xFFFF0000改变0xFF0000FF滤镜,反之亦然。 在本机部分中,它所做的只是用位运算符和

  • 我想创建一个像图片一样的按钮。我是颤动的初学者,所以我不知道如何开始。让我补充一点,我想为按钮添加一个红色发光效果。

  • 我不确定如何处理这个问题。 给定一个无向图,每条边的颜色要么是红色,要么是蓝色。如何在时间复杂度(O(m+n)log n)中找到包含尽可能少的红边的最小生成树。其中m个顶点和n个边。 任何帮助都将不胜感激。

  • 问题内容: 我正在尝试从图像中提取红色。我有应用阈值的代码,仅保留指定范围内的值: 但是,正如我检查的那样,红色的色相值可以在0到10的范围内,也可以在170到180的范围内。因此,我想保留这两个范围中任何一个的色相值。我尝试将阈值从10设置为170并使用函数,但随后我也获得了所有白色。我认为最好的选择是为每个范围创建一个遮罩并同时使用它们,因此我必须以某种方式将它们合并在一起,然后再继续。 有没

  • threejs 柱状图如何实现渐变色,比如从红色变成蓝色

  • 问题内容: 该方法返回单个int。如何分别获得红色,绿色和蓝色作为0到255之间的值? 问题答案: Java的Color类可以进行转换: