这个 类似于之前一个CF的题,直接从必败态倒着出发。

如果一个点能到达的点都是自己的必败态,那么他就是必败态。

in other word  -- 如果一个点能到达的点都是敌人的必胜态,那么他就是必败态。

如果一个点能到达一个自己的必胜态,那么他就是必胜态。

in other word  -- 如果一个点能到达一个敌人的必败态,那么他就是必胜态。

http://www.cnblogs.com/HITLJR/p/6613061.html

WZK的代码

  1 #include <bits/stdc++.h>
  2 #define maxn 110
  3 #define inf 0x3f3f3f3f
  4 #define REP(i,x,y) for(int i=x;i<(y);i++)
  5 #define RREP(i,x,y) for(int i=x;i>(y);i--)
  6 using namespace std;
  7 typedef long long ll;
  8 typedef pair<int,int>pii;
  9 int n,m;
 10 vector<int>e[maxn];
 11 int cnt[maxn][maxn][2],dp[maxn][maxn][2],vis[maxn][maxn][2],out[maxn];
 12 struct P{
 13     int pos_b,pos_a,op;
 14     P(){}
 15     P(int _,int __,int ___):pos_b(_),pos_a(__),op(___){}
 16 };
 17 int main()
 18 {
 19     int T,cas=1;scanf("%d",&T);
 20     while(T--) {
 21         queue<P>que;
 22         scanf("%d %d",&n,&m);
 23         for(int i=1;i<=n;i++) {
 24             out[i]=0;
 25             for(int j=1;j<=n;j++) {
 26                 dp[i][j][0]=dp[i][j][1]=-1;
 27                 vis[i][j][0]=vis[i][j][1]=0;
 28             }
 29             e[i].clear();
 30         }
 31         REP(i,1,m+1) {
 32             int u,v;scanf("%d %d",&u,&v);
 33             e[v].push_back(u);
 34             out[u]++;
 35         }
 36         REP(i,1,n+1) {vis[i][i][0]=1;dp[i][i][0]=0,que.push(P(i,i,0));}
 37         REP(i,1,n+1) {vis[i][i][1]=1;dp[i][i][1]=1,que.push(P(i,i,1));}
 38         REP(op,0,2) {       //0 Bob 1 Alice
 39             REP(i,1,n+1) {
 40                 REP(j,1,n+1) {
 41                     if(i==j) continue;
 42                     if(op==0) {
 43                         if(out[i]==0) {
 44                             dp[i][j][op]=0,que.push(P(i,j,op));
 45                             vis[i][j][op]=1;
 46                         }
 47                        // else if(out[i]==1&&pre[i][0]==j) dp[i][j][op]=0,que.push(P(i,j,op));
 48                     }
 49                     else {
 50                         if(out[j]==0) {
 51                             dp[i][j][op]=0,que.push(P(i,j,op));
 52                             vis[i][j][op]=1;
 53                         }
 54                     }
 55                 }
 56             }
 57         }
 58         REP(i,1,n+1) REP(j,1,n+1) cnt[i][j][0]=out[i];
 59         REP(i,1,n+1) REP(j,1,n+1) cnt[i][j][1]=out[j];
 60         while(!que.empty()) {
 61             P now=que.front();que.pop();
 62
 63             int v1=now.pos_b,v2=now.pos_a;
 64             // cout << v1 <<" "<< v2 <<" " << now.op  <<" "<<dp[v1][v2][now.op]<< endl;
 65            // cout<<v1<<" "<<v2<<" "<<now.op<<endl;
 66             if(!now.op) {       //bob
 67                 int Size=e[v2].size();
 68                 REP(i,0,Size) {
 69                     if(dp[v1][v2][now.op]==0) {
 70                         if(vis[v1][e[v2][i]][1]) continue;
 71                         dp[v1][e[v2][i]][1]=1;
 72                         vis[v1][e[v2][i]][1]=1;
 73                         que.push(P(v1,e[v2][i],1));
 74                     }
 75                     else if(dp[v1][v2][now.op]) {
 76                         if(vis[v1][e[v2][i]][1]) continue;
 77                         cnt[v1][e[v2][i]][1]--;
 78                         if(cnt[v1][e[v2][i]][1]==0) {
 79                             dp[v1][e[v2][i]][1]=0;
 80                             que.push(P(v1,e[v2][i],1));
 81                             vis[v1][e[v2][i]][1]=1;
 82                         }
 83                     }
 84                 }
 85             }
 86             else {          //Alice
 87                 int Size=e[v1].size();
 88                // cout<<Size<<endl;
 89                 REP(i,0,Size) {
 90                     if(dp[v1][v2][now.op]==0) {
 91                         if(vis[e[v1][i]][v2][0]) continue;
 92                         dp[e[v1][i]][v2][0]=1;
 93                         vis[e[v1][i]][v2][0]=1;
 94                         que.push(P(e[v1][i],v2,0));
 95                     }
 96                     else if(dp[v1][v2][now.op]) {
 97                         if(vis[e[v1][i]][v2][0]) continue;
 98                         cnt[e[v1][i]][v2][0]--;
 99                         if(cnt[e[v1][i]][v2][0]==0) {
100                             dp[e[v1][i]][v2][0]=0;
101                             que.push(P(e[v1][i],v2,0));
102                             vis[e[v1][i]][v2][0]=1;
103                         }
104                     }
105                 }
106             }
107         }
108         int x,y;scanf("%d %d",&x,&y);
109         printf("Case #%d: ",cas++);
110         //cout<<dp[x][y][0]<<endl;
111         if(dp[x][y][0]) puts("Yes");
112         else puts("No");
113     }
114 }

View Code

转载于:https://www.cnblogs.com/HITLJR/p/7688945.html

2014西安 H 有向图博弈 UVALive-7042相关推荐

  1. NIM数字游戏 SG函数 有向图博弈 学习记录

    写在前面:很早之前我就想写一写博弈论的学习记录了.本篇文章记录了我在学习博弈论初步时的顺序,现在网络上的博弈论资料大多都是从SG函数开始讲解,而我谜一样的学习方法让我对博弈论初步有了不同的理解过程,所 ...

  2. 2014西安全国邀请赛

    陪人训练,只A了四个题,赛后五分钟AC J,难受 写题解的时候有点困,语言组织有点问题,有时间再更新 sorry A - Wow! Such Doge! 题意:就给你一堆字符串,然后问你"d ...

  3. 2014 西安邀请赛状压DP

    题意很简单,求出出口到其他入口之间的最短路径,再求走完所有管道的距离的最小值. 按自己的思路就是TLE-- 看了题解后学习了状态压缩动态规划,再加宽搜求最短距离就ok了. 这里的dp[i][j]表示以 ...

  4. 2014 ACM/ICPC Asia Regional Xi'an Online

    2014西安网络赛 A. Post Robot 把每种单词都kmp跑一遍,顺序输出即可 #include <cstdio> #include <iostream> #inclu ...

  5. 有向图的十字链表存储

    /* c7-3.h 有向图的十字链表存储表示 */#define MAX_VERTEX_NUM 20typedef struct ArcBox{int tailvex,headvex; /* 该弧的尾 ...

  6. 【POJ 2484】A Funny Game(对称博弈)

    题意描述:有一个n个硬币摆成的环,Alice和Bob每次从里面取出一个或两个硬币,Alice先手,谁取到最后一个硬币谁就赢. 解题思路:这是一道对称博弈问题,如果硬币的数量小于等于2,Alice可以一 ...

  7. 计算一个有向图中出度为零和入度为零的顶点个数

    计算一个有向图中出度为零和入度为零的顶点个数 为了方便查找 有向图采用邻接矩阵实现 统计出度为0的顶点个数 即扫描邻接矩阵的某一行,记得加个tag进行标记大哥 void MGraph::Out0() ...

  8. 20160828_第4周周报

    写在前面 这个周算是暑假集训的最后一周了,当然,周报还是要照常出的,不过昨天我看到了一些公司的商业的周报模板,于是就模仿着更改一下以后周报的报告风格,以后周报统统采用以下的格式进行,按照本周学习内容, ...

  9. Robust Differential Game Guidance Laws Design for Uncertain Interceptor-Target Engagement via ADP

    原文:https://download.csdn.net/download/qq_29675093/10969822 南京航空航天大学孙景亮的论文,二人零和博弈框架下研究导弹拦截机动目标,使用的方法是 ...

最新文章

  1. 开发日记-20190913 关键词 汇编语言王爽版 第一章
  2. 新无限天空服务器,天空魔域3782版最新服务端(含网站程序)
  3. 自然语言处理在开放搜索中的应用
  4. MySQL 如何利用做排序
  5. SAP Cloud for Customer(C4C)前台显示的数据是如何从后台读取的
  6. APP技巧:手机该不该每天关机一次?看完才恍然大悟!
  7. 经济学家告诉你,胸越大的女生越会花钱!
  8. Python3 爬虫实战 — 猫眼电影TOP100【requests、lxml、Xpath、CSV 】
  9. php 位 逻辑,php – 在Laravel中放置菜单逻辑的位置?
  10. 十年 | 我花了十年,才弄明白了Node.js
  11. 4位格雷码的顺序编码_八位格雷码转换器.doc
  12. WCF两个类或者项目通信交互。
  13. 【渝粤教育】国家开放大学2018年秋季 2332T高等数学基础 参考试题
  14. mysql物业管理系统设计_小区物业管理系统的设计与实现(IDEA,SSM,MySQL)
  15. 斗鱼自动刷屏脚本-javaScript斗鱼刷屏脚本-js刷屏脚本
  16. teamtalk部署
  17. PS制作简洁漂亮的立体抽丝文字
  18. 将assets文件转为byte[]
  19. 深入解析内存原理:RAM的基本原理
  20. mysql不区分英文字母大小写模糊查询

热门文章

  1. maven实现依赖的“全局排除”
  2. 《JAVA 接口多继承》
  3. POJ 1324 Holedox Moving 搜索
  4. 网络营销之CPA、CPS、CPM、CPT、CPC 是什么
  5. SOC在安全方面的真实价值
  6. 提高开发效率之VS Code基础配置篇
  7. mysql双主使用reset master清除日志要小心
  8. 浮点数内存表示---记录一道题目
  9. 树莓派安装samba共享文件
  10. 餐巾计划问题 线性规划与网络流24题之10 费用流