题解:P12844 [蓝桥杯 2025 国 A] 树
不难发现思路是使用树形动态规划。我们给每个节点维护四种状态:选中该节点、该节点距离最近的已选点是父节点、是祖父节点、以及祖先两级之外都没有已选点。
其中选中状态只能和子节点的父节点已选状态匹配,以保证子节点与当前节点距离大于 \(2\)。
如果当前节点处于与最近已选点距离恰为 \(1\) 或恰为 \(2\) 的状态,则子节点的状态分别变为距离 \(2\) 和无约束。
如果当前节点无约束,则子节点既可以选中(进入选中状态),也可以保持无约束。这样,通过后序遍历累乘合并子树贡献,就能计算出每个节点在四种状态下的方案数。
为了避免递归栈溢出,先用 BFS 确定父子关系与遍历顺序,再按逆序进行 DP 转移。每次处理一个节点时,对它所有子节点的四个状态值进行常数次乘法和加法运算,整体时间复杂度为 \(O(n)\)。最后在根节点上把“选中”与“无约束”两种状态的方案数相加并减去空集即可得到答案。

浙公网安备 33010602011771号