1.随机选两个堆v,u,询问若在v到u间的路径上的石子堆中玩Nim游戏,是否有必胜策略,如果有,vfleaking将会考虑将这些石子堆作为初始局面之一,用来坑玩家。
2.把堆v中的石子数变为k。
分析:这有介绍。
题目简单描述:修改节点权值,询问路径异或和。
这个不就是dfs序维护树状数组吗?
以下借用学长的一幅dfs序的图
所以答案就是ask(st[x]) ^ ask(st[y]) ^ a[lca(x,y)] (lca(x,y)节点到根节点路径上所有的点值异或两次后值为0,所以需要异或一次lca(x,y))。求lca直接倍增即可。
由于直接dfs会爆栈,所以需要手动模拟。我是无耻的打开了栈开关。。。
#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include