Christmas Game | Codeforces 1498F
给定一棵 \(n\) 个点的树和 \(k\),每个结点上有 \(a_i\) 个物品,
Alice
和Bob
在上面玩游戏。在确定根之后,两个玩家轮流选择任意一个存在 \(k\) 级祖先的结点 \(u\),然后把 \(u\) 的任意个物品移到 \(u\) 的 \(k\) 级祖先上。
最后没有物品可取的人输。
问当每个结点作为根时,谁必胜。
\(n \le 10^5, k \le 20,a_i \le 10^9\)
当 \(k=1\) 时,它几乎是一个阶梯 NIM
游戏。
设根结点深度为 \(0\),根据阶梯 NIM
游戏的结论,原问题等价于所有深度为奇数的结点做 NIM
游戏,即先手必胜当且仅当所有深度为奇数的结点的 \(a_i\) 异或和不为 \(0\)。
对于一般的情况,先手必胜当且仅当 \[ \bigoplus_{\big\lfloor \frac {depth_u}k \big\rfloor 为奇数}a_u \ne 0 \] 设 \(f_{u,i}\) 表示以 \(u\) 为根的子树里,所有满足 \(depth_v - depth_u \equiv i \pmod {2k}\) 的结点 \(v\) 的点权异或和。
然后换根 DP
一下即可。
复杂度 \(O(nk)\)。
代码:
1 |
|