【AGC016 F】 Games on DAG

Description

給定一個DAG,1號、2號點上有1個棋子,A,B輪流玩遊戲,每輪可以選擇將u 上的棋子通過一條邊移動到v 上,無法移動者輸。求這個DAG的所有子圖(任意刪去邊,共2m 個)中滿足先手必勝的數量
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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章