2014西安 H 有向图博弈 UVALive-7042
这个 类似于之前一个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相关推荐
- NIM数字游戏 SG函数 有向图博弈 学习记录
写在前面:很早之前我就想写一写博弈论的学习记录了.本篇文章记录了我在学习博弈论初步时的顺序,现在网络上的博弈论资料大多都是从SG函数开始讲解,而我谜一样的学习方法让我对博弈论初步有了不同的理解过程,所 ...
- 2014西安全国邀请赛
陪人训练,只A了四个题,赛后五分钟AC J,难受 写题解的时候有点困,语言组织有点问题,有时间再更新 sorry A - Wow! Such Doge! 题意:就给你一堆字符串,然后问你"d ...
- 2014 西安邀请赛状压DP
题意很简单,求出出口到其他入口之间的最短路径,再求走完所有管道的距离的最小值. 按自己的思路就是TLE-- 看了题解后学习了状态压缩动态规划,再加宽搜求最短距离就ok了. 这里的dp[i][j]表示以 ...
- 2014 ACM/ICPC Asia Regional Xi'an Online
2014西安网络赛 A. Post Robot 把每种单词都kmp跑一遍,顺序输出即可 #include <cstdio> #include <iostream> #inclu ...
- 有向图的十字链表存储
/* c7-3.h 有向图的十字链表存储表示 */#define MAX_VERTEX_NUM 20typedef struct ArcBox{int tailvex,headvex; /* 该弧的尾 ...
- 【POJ 2484】A Funny Game(对称博弈)
题意描述:有一个n个硬币摆成的环,Alice和Bob每次从里面取出一个或两个硬币,Alice先手,谁取到最后一个硬币谁就赢. 解题思路:这是一道对称博弈问题,如果硬币的数量小于等于2,Alice可以一 ...
- 计算一个有向图中出度为零和入度为零的顶点个数
计算一个有向图中出度为零和入度为零的顶点个数 为了方便查找 有向图采用邻接矩阵实现 统计出度为0的顶点个数 即扫描邻接矩阵的某一行,记得加个tag进行标记大哥 void MGraph::Out0() ...
- 20160828_第4周周报
写在前面 这个周算是暑假集训的最后一周了,当然,周报还是要照常出的,不过昨天我看到了一些公司的商业的周报模板,于是就模仿着更改一下以后周报的报告风格,以后周报统统采用以下的格式进行,按照本周学习内容, ...
- Robust Differential Game Guidance Laws Design for Uncertain Interceptor-Target Engagement via ADP
原文:https://download.csdn.net/download/qq_29675093/10969822 南京航空航天大学孙景亮的论文,二人零和博弈框架下研究导弹拦截机动目标,使用的方法是 ...
最新文章
- 开发日记-20190913 关键词 汇编语言王爽版 第一章
- 新无限天空服务器,天空魔域3782版最新服务端(含网站程序)
- 自然语言处理在开放搜索中的应用
- MySQL 如何利用做排序
- SAP Cloud for Customer(C4C)前台显示的数据是如何从后台读取的
- APP技巧:手机该不该每天关机一次?看完才恍然大悟!
- 经济学家告诉你,胸越大的女生越会花钱!
- Python3 爬虫实战 — 猫眼电影TOP100【requests、lxml、Xpath、CSV 】
- php 位 逻辑,php – 在Laravel中放置菜单逻辑的位置?
- 十年 | 我花了十年,才弄明白了Node.js
- 4位格雷码的顺序编码_八位格雷码转换器.doc
- WCF两个类或者项目通信交互。
- 【渝粤教育】国家开放大学2018年秋季 2332T高等数学基础 参考试题
- mysql物业管理系统设计_小区物业管理系统的设计与实现(IDEA,SSM,MySQL)
- 斗鱼自动刷屏脚本-javaScript斗鱼刷屏脚本-js刷屏脚本
- teamtalk部署
- PS制作简洁漂亮的立体抽丝文字
- 将assets文件转为byte[]
- 深入解析内存原理:RAM的基本原理
- mysql不区分英文字母大小写模糊查询