[ABC340G] Leaf Color
Richard_Whr · · 题解
简要题意:
给你一颗树,每个点有颜色。问你有多少个连通块,度为
首先考虑
设
这样设计的原因是为了方便转移,使得状态具有延续性。
初始
对于每一颗子树以
-
不选:就是
f[u][x] ; -
选:原来的每一种方案和这颗子树中的每个方案都可以配对,因此是乘法原理:
f[u][x] \times f[v][x] ;
因此有:
最后记得将某些不合法情况减去。
不过我们可以发现,真正统计答案的时候,
-
当该点颜色就是
x 的时候,以u 为根的连通块内的所有合法方案数就是f[u][x] 。 -
当该点颜色不是
x 的时候,以u 为根的连通块内所有的合法方案,要减掉我们单独选了某个子树的情况,因为这样根的度为1 。
对于第二种情况,我们利用辅助数组
令:
此时我们就可以统计答案了,对于每个节点,我们统计连通块以他为根的答案(他的深度最小)。
此时需要敏感的点来了,我们发现对于一种颜色,真正就有价值的点并不多,很多转移都是无效而浪费时间的。
考虑建立虚树,这样我们将每种颜色单独抠出来做,即可保证复杂度为
代码