【AGC016 F】 Games on DAG

Description

给定一个DAG,1号、2号点上有1个棋子,A,B轮流玩游戏,每轮可以选择将 u u 上的棋子通过一条边移动到 v v 上,无法移动者输。求这个DAG的所有子图(任意删去边,共 2m 2 m 个)中满足先手必胜的数量
N<=15

Analysis

首先根据博弈论相关知识,可以知道如何判定一个给定的图是否先手必败:只需要判断是否有sg(1)=sg(2)即可
那么只要算出sg(1)=sg(2)的子图的数量,就能补集转化得到答案。
可以感受解法是DP,而且由于跟子图有关/N<=15,可以想到状压DP,设f[s]表示点集为s的图的子图合法(sg(1)=sg(2))的数量
考虑转移,枚举s中的必败点集合L,那么必胜点集合为W,可以发掘如下条件
L内部不能有边
W内部每个点至少向L连一条边
L向W任意
W内部要保证连出的边使得sg(1)=sg(2),所以方案数就是f[W]
发现转移的本质就是在原来W的基础上,新增了L中的点,并且使L中的点sg为0,并把W中的点的sg值+1
所以潜移默化中我们转移相当于对sg分层
O(3^n*n)

你可能感兴趣的:(题解,状压DP,博弈论)