P8258 [CTS2022] 独立集问题
考虑对于一个系数序列,判断其是否合法。
注意到如果一个 \(+\) 周围都是 \(-\),那么我们就可以对于中间操作,中间的符号变为任意,周围的系数变成 \(0\)。不妨认为这些点都变成了通配符 \(?\),\(?\) 可以匹配为 \(+\) 或 \(-\)。
最终合法的序列不好简单刻画,考虑操作的形态。对于一次操作,我们把边从中间往两边定向,那么整棵树就会由若干棵叶向树覆盖点集。
覆盖点集只是必要条件,我们可以选若干个单点来覆盖整棵树,但是这显然是不能操作出来的。我们需要去添加一些限制。
可以发现一个限制是,对于叶向树的根,我们需要它们不相邻。这个条件也是充分的,在定向后的树上拓扑排序即可。
那么就可以 dp 了。dp 记录当前点符号、子树内是否存在根、当前点是不是根等信息,转移是简单的。
浙公网安备 33010602011771号