【发布时间】:2015-05-12 08:10:59
【问题描述】:
我刚开始阅读图论,正在阅读有关图着色的内容。这个问题突然出现在我脑海中:
我们必须只用一种颜色为我们的无向图(不完全)着色,以使彩色节点的数量最大化。我们需要找到这个最大数量。我能够为非循环图制定一种方法:
我的方法:首先,我们将图划分为独立的组件,并对每个组件执行此操作。我们创建一个 dfs 树并在遍历它的同时创建 2 个 dp 数组,以便 root 排在最后:
dp[0][u]=sum(dp[1][visited children])
dp[1][u]=sum(dp[0][visited children])
ans=max(dp[1][root],dp[0][root])
dp[0][i] , dp[1][i] are initialized to 0,1 respectively.
这里 0 表示无色,1 表示有色。
但这不适用于循环图,因为我假设没有访问过的孩子被连接。
有人可以指导我如何解决循环图的这个问题(而不是通过蛮力)吗?是否可以修改我的方法,或者我们是否需要提出不同的方法?像为边缘最少的节点着色这样的贪婪方法会起作用吗?
【问题讨论】:
-
我不明白你的问题?如果为整个图着色,结果是否最佳?
-
@PhamTrung 两个连续的顶点不能用相同的颜色着色。
-
很确定它也是 NP Hard,可能可以从 Vertex-Cover 减少。问题之间存在差异,但本质上它们归结为相同的目标。
-
那么两个未着色的节点不被认为具有相同的颜色吗?
-
@PhamTrung 是的,两个未着色的节点可以是连续的。
标签: algorithm graph graph-algorithm