用两种颜色着色一棵树

时间:2017-01-27 21:17:22

标签: algorithm tree

我有一棵树,我想为每个节点black or white着色。如果是For every node N there exist at least One neighbor with the same color as of N

,则说树是有效的

我的方法:
让我们构造一个dp [2] [N],其中0,1表示黑白

ways = (dp[0][i1]+dp[1][i1])*(dp[0][i2]+dp[1][i2)*.....i upto All Children of N

   dp[0][N] = (ways-Number of ways when all the children are 1)
   dp[1][N] = (ways-Number of ways when all the children are 0)

但我的方法并没有给我正确的答案?请帮助我,我错过了什么?

1 个答案:

答案 0 :(得分:0)

对于每个节点u,让C(u)为以u为根的子树的有效着色数,让A(u)为所有颜色的着色次数u的适当后代具有相同颜色的邻居(“几乎有效”)。重现是

C(u) = A(u) - 2 product_{v is a child of u} (C(v)/2)
A(u) = 2 product_{v is a child of u} (C(v)/2 + A(v)/2)

A(u)的逻辑是(1)根有两种颜色(2)每个与v不同的儿童u必须有效(3)每个孩子{与v相同的{1}}颜色必须几乎有效。 u的逻辑是,所有孩子与父母不同的可能的颜色几乎都是有效的。