【AGC016 F】 Games on DAG

14 篇文章 0 订阅
5 篇文章 0 订阅

Description

给定一个DAG,1号、2号点上有1个棋子,A,B轮流玩游戏,每轮可以选择将 u u 上的棋子通过一条边移动到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)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值