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\) 的情况需要特殊处理一下。
本文作者:Creeper_l
本文链接:https://www.cnblogs.com/Creeperl/p/18450926
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】博客园2025新款「AI繁忙」系列T恤上架,前往周边小店选购
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步