题意简述
多组数据,每次给定一个有$n(<=3e5,\sum n<=1e6)$个节点的树,每个点有点权。两个人玩$Nim$游戏,两人轮流操作。每次操作,珂以把一个点上$>=1$个点权移动到父亲上,如果有一个不能操作了,这个人就输了。判断先手是否会赢。
思路框架
深度为奇数的点权异或起来,如果非0,先手必胜。
具体思路
首先我们要把这个问题转换成$Nim$游戏。
然后我们要知道一个模型,叫阶梯$Nim$游戏。其规则和这个题类似,只不过是序列上的问题,每个点$i$珂以把$>=1$个点权移动到$i-1$位置上。
然后这个问题的解,就是把奇数位置异或起来,非零则先手必胜。
知道这个之后,转换成树上,水的鸭皮。
但是如何证明这个序列上的问题呢?
证明
- 先手必胜
此时先手就会逼迫后手进行Nim游戏。先手最理想的$Nim$游戏是,先手只动奇数的位置,那么这个结论就是成立的。但是后手显然不会傻傻的让先手玩$Nim$游戏,动了偶数位置,那么先手只要把后手移动的这堆再往前移动一个位置,那就没有区别了。这就是先手的“逼迫”过程。这样,后手没有办法,只能乖♂乖玩$Nim$游戏,等死了。
- 后手必胜
同上,后手会逼迫先手进行$Nim$游戏。先手动偶数位置,后手只要再动一次即珂。所以,和上面类似,先手也只能等死了。
证毕
然后这个题就被切了。
实现注意
- 题目中有说fa[i]小于i,所以我们连搜都不用搜,倒着循环一遍即珂
代码
1 |
|