题意:

  Bob和Alice在有向图内玩游戏,n个顶点,m条边。

  每人一颗棋子,初始位置分别是x,y。

  Bob先手,轮流操作,每次只能走一条有向边。

  结束条件: 1.不能操作的人输 2.两个棋子重合Bob输 3.游戏没有尽头Alice输

  问 Bob 能不能赢?

  2 <= n <= 100. 1 <= m <= n <= n*(n-1) 1 <= x , y <= n, x != y.

分析:

  设计状态[x][y][0/1] 表示Alice的棋子在x,Bob的棋子在y,0表示Alice下次先手,1表示Bob下次先手

  那么f[x][y][0/1]就表示该状态对于Bob来说是必胜状态还是必败状态

  考虑到Bob赢的特殊规则:游戏没有尽头

  那么对于我们所有的状态,我们可以初始默认全部都是1

  然后挑出那些刚开始显而易见的必败态(博弈树的叶子节点),从这些必败态开始扩展,能扩展到的节点都是必败态节点,这样用队列扩展结束后,每个点的胜败就知道了

  刚开始必败态:f[x][x][0/1](棋子重合Bob输) f[i][x][1] (x没有出边,Bob无法走子,输)

  考虑f[i][j][0]的转移:

    既然通过f[i][j][0]转移,就说明该状态一定是Bob的必败态,而且这个状态是Alice先手,那么说明这个状态的父节点是Bob先手

    Bob从f[i'][j][1]走到f[i][j][0],那么现在问题就是f[i'][j][1]是不是必败态呢?

    通过博弈的基础知识易得,Bob先手走如果走到这个必败节点,那么就必须是Bob能走到的节点全都是必败节点!

    在这里,我们可以把状态节点f[i'][j][1]的访问次数+1,表示f[i'][j][1]的一条出边对应的节点是必败节点

    注意f[i'][j][1]的出边数量是i'点的出度!所以,如果某次扩展,f[i'][j][1]的访问次数正好为i'点的度数,那么说明这个状态节点的所有的子节点都是Bob必败态,所以该节点也是Bob必败态

  考虑f[i][j][1]的转移

    既然通过f[i][j][1]转移,就说明该状态一定是Bob的必败态,而且这个状态是Bob先手,那么说明这个状态的父节点是Alice先手

    既然是Alice先手,能走到一个Bob必败态,那么Alice肯定要这样选择,所以直接f[i][j'][0]是必败态

  注意bfs过程中,对状态判重

  最后结果就是f[Alice][Bob][1]

UVALive7042(博弈论)的更多相关文章

  1. IT人生知识分享:博弈论的理性思维

    背景: 昨天看了<最强大脑>,由于节目比较有争议性,不知为什么,作为一名感性的人,就想试一下如果自己理性分析会是怎样的呢? 过程是这样的: 中国队(3人)VS英国队(4人). 1:李建东( ...

  2. [poj2348]Euclid's Game(博弈论+gcd)

    Euclid's Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9033   Accepted: 3695 Des ...

  3. 博弈论揭示了深度学习的未来(译自:Game Theory Reveals the Future of Deep Learning)

    Game Theory Reveals the Future of Deep Learning Carlos E. Perez Deep Learning Patterns, Methodology ...

  4. TYVJ博弈论

    一些比较水的博弈论...(为什么都没有用到那什么SG呢....) TYVJ 1140  飘飘乎居士拯救MM 题解: 歌德巴赫猜想 #include <cmath> #include < ...

  5. Codeforces 549C. The Game Of Parity[博弈论]

    C. The Game Of Parity time limit per test 1 second memory limit per test 256 megabytes input standar ...

  6. 【POJ】2234 Matches Game(博弈论)

    http://poj.org/problem?id=2234 博弈论真是博大精深orz 首先我们仔细分析很容易分析出来,当只有一堆的时候,先手必胜:两堆并且相同的时候,先手必败,反之必胜. 根据博弈论 ...

  7. 博弈论入门小结 分类: ACM TYPE 2014-08-31 10:15 73人阅读 评论(0) 收藏

    文章原地址:http://blog.csdn.net/zhangxiang0125/article/details/6174639 博弈论:是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策 ...

  8. poj 3710 Christmas Game 博弈论

    思路:首先用Tarjan算法找出树中的环,环为奇数变为边,为偶数变为点. 之后用博弈论的知识:某点的SG值等于子节点+1后的异或和. 代码如下: #include<iostream> #i ...

  9. hdoj 1404 Digital Deletions(博弈论)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1404 一看就是博弈论的题目,但并没有什么思路,看了题解,才明白 就是求六位数的SG函数,暴力一遍,打表 ...

随机推荐

  1. spring.net应用

    经过一段时间的调试,终于把spring.net中关于aop的方面给做个了一个比较完整的Demo.包含异常日志和性能日志.spring.net和log4net配置. http://files.cnblo ...

  2. 常用css属性拓展

    text-overflow:clip | ellipsis(默认值:clip)clip:当内联内容溢出块容器时,将溢出部分裁切掉.ellipsis:当内联内容溢出块容器时,将溢出部分替换为(...). ...

  3. tomcat不打印日志

    commons-logging.jar导入这个包到tomcat  lib下 2.修改tomcat的bin目录下面的catalina.bat文件   只需修改:set CLASSPATH=%CLASSP ...

  4. CREATE TRIGGER - 定义一个新的触发器

    SYNOPSIS CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] } ON table [ FOR [ EACH ] { ROW | ...

  5. [转]解决右键用notepad++打开提示【ShellExecute failed (2): Is this command Correct? (Fix) 】

    最近发现右键使用notepad++打开文件时提示如下错误: ShellExecute failed (2): Is this command Correct? ... 经用搜索引擎搜索得知,应该是开启 ...

  6. 简单说一下 TCP打洞和UDP打洞

    1, TCP协议通信: 现在有两台电脑A和B.在 假设A的地址为 192.168.0.100 假设B的地址为 192.168.0.102 A想给B发送一个字符串Hello,  如果A,B之间采用TCP ...

  7. Axure 9 面板折叠显示隐藏

    1  首先放置一个面板1作为点击事件: 2  另外一个面板2或者其他组建,将其设置为动态面板,然后隐藏 3  给面板1添加如下事件,即可: 4  我们点击面板1,可以实现展开隐藏面板2的动态效果

  8. CAD参数绘制直线(网页版)

    用户可以在CAD控件视区任意位置绘制直线. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下: 参数 说明 DOUBLE dX1 直线的开始点x坐标 DOUBLE ...

  9. java_线程优先级

    线程优先级分为三个等级: MAX_PIORITY:10  优先 MIN_PRIORITY:1 NORM_PRIORITY:5  默认 getPriority:获取优先级 setPriority:设置优 ...

  10. 微信小程序UI组件库 iView Weapp快速上手

    概述 今天在网上突然看到iView新出了一个微信小程序的组件库iView Weapp,自己就上手试了一下,发现用起来还是不错的,把自己使用的过程与大家分享下. 一 预览iView组件 1.可以在手机上 ...