看到某个限制,直接考虑建出 DFS 树,则深度不超过 10。
从而考虑在 DFS 序上 DP,设 fu,S 表示当前考虑到 u,DFS 序在 u 之前的除了 u 到根的链上的结点都被覆盖,u 到根的链上按深度的状态为 S。
这是一个三进制状态。三个值分别代表没有选也没有被覆盖 / 没有选但被覆盖 / 选了。
从而按照 DFS 序推过去就可以了。
如果是在 DFS 的时候计算直接计算可能在回溯时更新父亲会更加自然(即题解提到的欧拉序)。
不过我偷懒直接在 DFS 序上推了。
注意卡常。
代码:
1 |
|