qoj8331 Bot Brothers 题解
一个很显然的观察是后手一定不败,策略就是一直跟着先手走。考虑是平局还是后手胜。
因为两个随时都一定在同一个深度上,我们不妨按深度来考虑。
设 \(s_u\) 表示 \(u\) 的子树中叶子结点的集合,\(t_u\) 表示 \(u\) 的子树中叶子节点值 \(+1\) 的集合。
我们考虑在深度为 \(depth\) 的所有点。首先若存在一个点 \(u\) 使得没有一个点 \(v\) 的 \(s_v\) 能够完全包含 \(t_u\),那么一定是平局,因为先手可以走到点 \(u\),这样后手一定不胜。那先手如果要胜,就必须满足所有的 \(u\) 都一定能找到一个 \(v\) 使得 \(s_v\) 包含 \(t_u\)。仔细思考就会发现这个条件相当于每个点的集合大小全部相等(也就是 \(t_u=s_v\)),并且形如 \(\{a,a+x,a+2x,\dots\}\),\(x\) 为深度为 \(depth\) 的点的数量。
也就是说,对于同一个深度的点,我们按 \(a\) 从小到大排序。则必须满足 \(t_i=s_{i+1}\)。判断两个集合是否相等直接哈希即可。时间复杂度 \(O(n \log n)\),瓶颈在排序。
注意若集合大小等于 \(1\) 的情况需要特殊处理一下。