#0016. Nim

虽然我tle了但我还是来写题解了

题目大意:

  给一棵树,两种操作:改变点的权值 和 查询以u到v的路径所有点权值作为每堆石子数玩nim是否有必胜策略。

  n,m<=5e5

题目解法:

  首先nim必胜当且仅当所有石子的数量的异或和不为0.所以这道题就转化带修的路径异或和求解。

  注意到u->v的路径异或和等价于(u->root)^(v->root)^a[lca(u,v)]. 我们考虑每个点维护到根的异或和,那么每次修改只会对一个点的子树内所有点造成影响。排完dfs序以后题目转化为单点查询区间修改。考虑到本题n给的比较大最好不要用线段树,而是处理成差分用bit维护。

  复杂度O(n+m log n)

  顺便讲一下反nim(最后拿的人输), 有两种先手必胜的情况:

    (1) 各堆石子数目异或结果不为零,且至少有一堆石子数目大于1

    (2) 各堆石子数目异或结果为零,且所有堆石子数目均为1;

posted @ 2020-06-01 11:03  Myrcella  阅读(186)  评论(0)    收藏  举报