SG函数
模型
一张有向图和若干个棋子,两个选手轮流操作,每次可以将任意一个棋子沿着有向边移动(不可以不移动),无法移动者输,问先手是否必胜。
解决
定义
mex{s}
表示
s
集合中没有出现的最小的非负整数,比如
然后定义每个节点的SG函数为 SG(x)=mex{SG(y)|(x,y)∈E} 也就是后继节点中没有出现的最小的非负整数。这么定义显然有几个结论:
-
SG(x)=0
,那么
x
的前驱
y 一定都有 SG(y)>0 。 -
SG(x)>0
,那么
x
的后继
y 一定存在 SG(y)=0 。
继续观察,会发现
x
能够到达一个
定理
所以
n
个棋子就是