[Solution] APC001E Antennas on Tree

· · 题解

考场做法,较为复杂。

我们记选择的点为关键点,合法情况为子树内所有点的坐标不同。

考虑一个子树中的情况,设子树根节点为 x,子节点个数为 son_x。对 son_x 分类讨论:

我们先按照这种方法统计出一个方案。

但这其实是有漏洞的。对于第二种情况,如果存在 fa_x 则可能出现下方的情况:即剩余 y_2 子树中没有标记,y_2fa_x 的坐标相同。

但我们可以通过手动调整使 x 子树合法。容易发现,在整棵树上任意 x 子树外的关键点都可以使两者坐标不同。而这种情况只会在有 fa_x 时出现,也就是说根节点 rt 没有这种忧虑。那么如果 rt 是关键点,对其他所有点都一定会有“子树外的关键点”。所以只需要判断 rt 不是关键点时是否存在上方的不合法情况即可。

我们可以在统计方案时,对所有满足“有父节点且存在子节点的子树中没有关键点”的 x 打上标记。然后在方案统计结束后,统计每颗子树外的关键点数量。如果存在“有标记且子树外没有关键点”的点,rt 为关键点。

实现还是很简单的。

可能会有的疑惑: