因为 01 序列的 mex 值只有 0,1,2 三种不同取值,所以考虑然后 dp:设 fi,j,0/1 表示当前处理了 i 点为根的子树内的信息,i 所对应的同色连通块的大小为 j,i 点写的数字是 0/1,答案最少减少了多少。那么显然有下面的转移:
- fu,i,0←min(fv,j,1+fu,i,0,fv,i−j,0+fu,j,0+ij−i2)
- fu,i,1←min(fv,j,0+fu,i,1,fv,i−j,1+fu,j,1+2(ij−i2))
直接转移看上去时间复杂度为 O(n3),但可以考虑这样的一个策略:直接对树做黑白染色,容易证明该贪心策略答案减少的数量即为 n+i=1∑n[coli=1]≤2n 也就是 O(n) 级别的,而 dp 转移过程中枚举的同色连通块大小 j 对答案的减小是 O(j2) 级别的,因此枚举的连通块大小只需要到 O(n) 级别即可。
剩下部分的转移其实可以看作是一个树上背包的形式,枚举连通块大小只枚举到子树大小即可保证时间复杂度为 O(nn),可以通过该题。
喜欢的话,留下你的评论吧~