- 一.\(SG\) 函数
定义 \(SG(S)=mex(SG(T))\),\(T\) 为 \(S\) 的后继状态
一般来说,博弈论的许多题都可以把一整个局面分成一个个互不影响的小局面
这样的话有 \(SG(S)=SG(T_1)\ xor\ SG(T_2)[T_1+T_2=S]\)
一般来说,\(SG\) 函数的题遵循一个套路
-
1.设暴力 \(dp\)
-
2.打表找规律
-
3.AC
这样的题就不细讲了,写几个不寻常的
一棵树,两个人把一个点到根的路径上的点染黑,求 \(SG\) 函数
考虑一次操作相当于把一个点到根路径上的所有点删掉
那么如果我们处理出来了每个点子树的 \(SG\) 函数,直接做复杂度 \(O(n^2)\) 的
考虑处理 \(p[u][v]\) 表示在 \(u\) 为根时删掉 \(v\) 之后的 \(SG\) 值
考虑这个玩意的转移发现是赋值成某个儿子的 \(p\) 数组再异或上其他儿子的 \(SG\) 值
所以我们需要的就是区间异或以及求 \(mex\)
这个东西可以很容易用字典树维护出来
赋值可以直接字典树合并
- 二.杂题
一个 \(n\times m\) 的网格,右边界和上边界标记了胜负,两个人从左下角出发轮流移动同一枚棋子,问是否先手必胜
结论提
发现除了最外面的两层之外同一对角线的状态相同
直接做就行了
有很多变种,比如右上边界不规则,结论是一样的