【NOI2011】兔兔与蛋蛋的游戏【二分图博弈】
传送门
结论 不会有同一个棋子移动两次
反证法,对于第一个移动第二次的棋子
设两次移动之间(含)的移动的棋子为A1,A2,A3,……,AnA_1,A_2,A_3,……,A_nA1,A2,A3,……,An(指棋子本身而非位置)
因为最后移回来了,所以往上和往下、往左和往右次数相同
所以nnn是偶数 然后A1A_1A1和AnA_nAn颜色不同
但这个棋子开始被移到当前位置,最后被移走,所以A1=AnA_1=A_nA1=An,矛盾
所以移动路径没有交
既然这样,我们就不用考虑棋盘具体的变化,而看成空格交替走两个颜色
然后和上一道题就一样了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#define MAXN 2005
#define MAXM 10005
using namespace std;
struct edge{int u,v;}e[MAXM];
int head[MAXN],nxt[MAXM],cnt;
void addnode(int u,int v)
{e[++cnt]=(edge){u,v};nxt[cnt]=head[u];head[u]=cnt;
}
int n,m;
#define id(x,y) (((x)-1)*m+(y))
char s[50][50];
const int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
bool del[MAXN];
int link[MAXN],used[MAXN];
bool find(int u)
{for (int i=head[u];i;i=nxt[i])if (!used[e[i].v]&&!del[e[i].v]){used[e[i].v]=1;if (!del[link[e[i].v]]&&(!link[e[i].v]||find(link[e[i].v]))){link[u]=e[i].v,link[e[i].v]=u;return true;}}return false;
}
int calc()
{memset(link,0,sizeof(link));int ans=0;for (int x=1;x<=n;x++)for (int y=1;y<=m;y++)if (s[x][y]!='O'&&!del[id(x,y)])memset(used,0,sizeof(used)),ans+=find(id(x,y));return ans;
}
bool win[MAXN];
int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=n;i++) scanf("%s",s[i]+1);int st;for (int x=1;x<=n;x++)for (int y=1;y<=m;y++)if (s[x][y]!='O'){for (int i=0;i<4;i++)if (s[x+dx[i]][y+dy[i]]=='O')addnode(id(x,y),id(x+dx[i],y+dy[i]));if (s[x][y]=='.') st=id(x,y);}int k,tot=0;scanf("%d",&k);int mmat=calc();for (int i=1;i<=2*k;i++){del[st]=1;int t=calc();if (mmat!=t) win[i]=1;mmat=t;int x,y;scanf("%d%d",&x,&y);st=id(x,y);}for (int i=1;i<=k;i++) if (win[2*i-1]&&win[2*i]) ++tot;printf("%d\n",tot);for (int i=1;i<=k;i++) if (win[2*i-1]&&win[2*i]) printf("%d\n",i); return 0;
}
【NOI2011】兔兔与蛋蛋的游戏【二分图博弈】相关推荐
- [NOI2011]兔兔与蛋蛋游戏 二分图博弈
题面 题面 题解 通过观察,我们可以发现如下性质: 可以看做是2个人在不断移动空格,只是2个人能移动的边不同 一个位置不会被重复经过 : 根据题目要求,因为是按黑白轮流走,所以不可能重复经过一个点,不 ...
- [NOI2011] 兔兔与蛋蛋游戏题解
题目描述 这些天,兔兔和蛋蛋喜欢上了一种新的棋类游戏. 这个游戏是在一个 nn 行 mm 列的棋盘上进行的.游戏开始之前,棋盘上有一个格子是空的,其它的格子中都放置了一枚棋子,棋子或者是黑色,或者是白 ...
- 【BZOJ2437】【codevs1949】兔兔与蛋蛋游戏,博弈+二分图匹配
传送门1 传送门2 思路: 关于证明 算是bzoj1443的强化版吧 但我是先写的这道题再写的bzoj1443,所以刚开始比较懵逼 二分图中的点是空格.与空格坐标和的奇偶相同的黑点.坐标和奇偶不同的白 ...
- 【题解】P1971 [NOI2011] 兔兔与蛋蛋游戏
首先可以推出来一个引理:空格不可能在经过几次操作后回到原来的位置. 大概感性证明一下:容易发现这个空格如果想要走成一个环,向上走的次数=向下走的次数,向左走的次数=向右走的次数.那么如果开始是兔兔走的 ...
- bzoj2437 [Noi2011]兔兔与蛋蛋
二分图博弈果然都是一个套路,必经点必胜,非必经点必败, 但是肯定不能每走一步就重新建图判断必胜还是必败,那么我们可以这样:每走一步就把这个点删掉,然后find他原来的匹配,如果找不到,就说明他是必经点 ...
- 2023年玩兔年小游戏《兔兔保卫萝卜战》赢新年祝福「钱兔无量」
PS:粉丝可以免费领源码,私信我或者评论666即可~~~~~~~~ 导读 | 世界杯虽已闭幕,但其带给我们的精彩,仿佛就在昨天,想一想,还是有一种爽劲,不知道大家是否也这样?转眼就到了2023年,今年 ...
- Python跳跳兔小游戏源代码,兔年必玩小游戏,兔年大吉
Python跳跳兔小游戏源代码,兔年必玩小游戏,兔年大吉,小兔子跳跳,按空格键向上跳跃,按键盘方向键进行左右移动,以避开飞弹,以防被炸,还可以捡到火箭道具哦. 完整程序下载地址:Python跳跳兔小游 ...
- linux 性能测试 antutu,除了安兔兔跑分,还有这6种办法能证明手机强弱
原标题:除了安兔兔跑分,还有这6种办法能证明手机强弱 现在说起手机跑分,已经稀松平常,但早在五年前,很多手机用户根本不知道如何测试手机性能."跑分"这个词汇只会出现在媒体的评测文章 ...
- android 跑分软件,跑分软件安兔兔公布了6月份Android手机性能榜TOP10
看了一下这期的安兔兔Android手机性能TOP10,对于华为来说,打击巨大,搭载麒麟处理器的手机没一款上榜,反观高通,则是疯狂屠榜,从第一名到第十名,都是使用它家骁龙8系列处理器的手机. 昨天国内知 ...
- 十月 android版本分布,安兔兔发布2018年10月份Android手机性能排行榜
汽车行业有金九银十一说,手机行业同样也是如此.在刚刚过去的 10 月份,我们见证了多款国产旗舰手机的发布,包括Mate20 系列.小米MIX3.荣耀Mgaic 2.努比亚X等等,得益于强大的硬件配置, ...
最新文章
- 【idea】idea如何配置JDK(转)
- 本周看代码找bug总结
- 动人配乐是如何炼成的?带您了解《花之灵》背景原声的幕后制作秘辛
- SAP CRM系统到底有多少种订单类型
- html5的新标记,HTML5 新标记
- flume linux环境搭建,linux安装flume及问题
- 【英语学习】【Level 07】U01 Making friends L2 A new friend from the past
- matlab中TCR触发,TCR+FC型SVC的研究及MATLAB仿真
- wsimport指令
- Autojs实现图片转字符串(简易ocr预备步骤)
- CTF 杂项 隐写术 密码学及编码 取证技术
- [转载]AutoCAD2013 以上利用AccoreConsole+ c# NetApi 批量处理图纸
- 安卓手机无线投屏电脑 手机电脑同屏
- java.lang.IllegalStateException: No instances available for user
- 职业病 颈椎肩膀 马步、摇肩、通背劲(转载)
- Linux系统监视与进程管理
- 同态加密之Paillier算法
- python下拉菜单无限营销工作室_Python生成流水线《无限拍卖》文字!
- 计算机中rom,计算机中RAM和ROM
- 给自己看的(摘自他人)
热门文章
- 竞赛奇葩队名,学编程的人都是隐藏的段子手 | 今日最佳
- 造作吧,Python快速入门!
- 程序员必知的 Python 陷阱与缺陷列表
- linux浏览器不能播放音频文件夹,在html中插入音频文件在浏览器中播放音频文件的兼容性问题...
- php+转义实体字符,PHP针对HTML实体字符的转义函数
- javq接口_Java为什么要使用接口_java接口怎么使用
- java弹窗 触发事件_关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法...
- qbuttongroup如何都不选中_全程马拉松,半程马拉松该如何跑?很多人都不知道这些细节...
- windows制作定时关机脚本_自动关机、自动打开程序… 让Windows自动执行任何操作...
- java跳转画面后画面白了_如何跳转指定页面后再次跳转到另一页面或原来的页面...