传送门

结论 不会有同一个棋子移动两次

反证法,对于第一个移动第二次的棋子

设两次移动之间(含)的移动的棋子为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】兔兔与蛋蛋的游戏【二分图博弈】相关推荐

  1. [NOI2011]兔兔与蛋蛋游戏 二分图博弈

    题面 题面 题解 通过观察,我们可以发现如下性质: 可以看做是2个人在不断移动空格,只是2个人能移动的边不同 一个位置不会被重复经过 : 根据题目要求,因为是按黑白轮流走,所以不可能重复经过一个点,不 ...

  2. [NOI2011] 兔兔与蛋蛋游戏题解

    题目描述 这些天,兔兔和蛋蛋喜欢上了一种新的棋类游戏. 这个游戏是在一个 nn 行 mm 列的棋盘上进行的.游戏开始之前,棋盘上有一个格子是空的,其它的格子中都放置了一枚棋子,棋子或者是黑色,或者是白 ...

  3. 【BZOJ2437】【codevs1949】兔兔与蛋蛋游戏,博弈+二分图匹配

    传送门1 传送门2 思路: 关于证明 算是bzoj1443的强化版吧 但我是先写的这道题再写的bzoj1443,所以刚开始比较懵逼 二分图中的点是空格.与空格坐标和的奇偶相同的黑点.坐标和奇偶不同的白 ...

  4. 【题解】P1971 [NOI2011] 兔兔与蛋蛋游戏

    首先可以推出来一个引理:空格不可能在经过几次操作后回到原来的位置. 大概感性证明一下:容易发现这个空格如果想要走成一个环,向上走的次数=向下走的次数,向左走的次数=向右走的次数.那么如果开始是兔兔走的 ...

  5. bzoj2437 [Noi2011]兔兔与蛋蛋

    二分图博弈果然都是一个套路,必经点必胜,非必经点必败, 但是肯定不能每走一步就重新建图判断必胜还是必败,那么我们可以这样:每走一步就把这个点删掉,然后find他原来的匹配,如果找不到,就说明他是必经点 ...

  6. 2023年玩兔年小游戏《兔兔保卫萝卜战》赢新年祝福「钱兔无量」

    PS:粉丝可以免费领源码,私信我或者评论666即可~~~~~~~~ 导读 | 世界杯虽已闭幕,但其带给我们的精彩,仿佛就在昨天,想一想,还是有一种爽劲,不知道大家是否也这样?转眼就到了2023年,今年 ...

  7. Python跳跳兔小游戏源代码,兔年必玩小游戏,兔年大吉

    Python跳跳兔小游戏源代码,兔年必玩小游戏,兔年大吉,小兔子跳跳,按空格键向上跳跃,按键盘方向键进行左右移动,以避开飞弹,以防被炸,还可以捡到火箭道具哦. 完整程序下载地址:Python跳跳兔小游 ...

  8. linux 性能测试 antutu,除了安兔兔跑分,还有这6种办法能证明手机强弱

    原标题:除了安兔兔跑分,还有这6种办法能证明手机强弱 现在说起手机跑分,已经稀松平常,但早在五年前,很多手机用户根本不知道如何测试手机性能."跑分"这个词汇只会出现在媒体的评测文章 ...

  9. android 跑分软件,跑分软件安兔兔公布了6月份Android手机性能榜TOP10

    看了一下这期的安兔兔Android手机性能TOP10,对于华为来说,打击巨大,搭载麒麟处理器的手机没一款上榜,反观高通,则是疯狂屠榜,从第一名到第十名,都是使用它家骁龙8系列处理器的手机. 昨天国内知 ...

  10. 十月 android版本分布,安兔兔发布2018年10月份Android手机性能排行榜

    汽车行业有金九银十一说,手机行业同样也是如此.在刚刚过去的 10 月份,我们见证了多款国产旗舰手机的发布,包括Mate20 系列.小米MIX3.荣耀Mgaic 2.努比亚X等等,得益于强大的硬件配置, ...

最新文章

  1. 【idea】idea如何配置JDK(转)
  2. 本周看代码找bug总结
  3. 动人配乐是如何炼成的?带您了解《花之灵》背景原声的幕后制作秘辛
  4. SAP CRM系统到底有多少种订单类型
  5. html5的新标记,HTML5 新标记
  6. flume linux环境搭建,linux安装flume及问题
  7. 【英语学习】【Level 07】U01 Making friends L2 A new friend from the past
  8. matlab中TCR触发,TCR+FC型SVC的研究及MATLAB仿真
  9. wsimport指令
  10. Autojs实现图片转字符串(简易ocr预备步骤)
  11. CTF 杂项 隐写术 密码学及编码 取证技术
  12. [转载]AutoCAD2013 以上利用AccoreConsole+ c# NetApi 批量处理图纸
  13. 安卓手机无线投屏电脑 手机电脑同屏
  14. java.lang.IllegalStateException: No instances available for user
  15. 职业病 颈椎肩膀 马步、摇肩、通背劲(转载)
  16. Linux系统监视与进程管理
  17. 同态加密之Paillier算法
  18. python下拉菜单无限营销工作室_Python生成流水线《无限拍卖》文字!
  19. 计算机中rom,计算机中RAM和ROM
  20. 给自己看的(摘自他人)

热门文章

  1. 竞赛奇葩队名,学编程的人都是隐藏的段子手 | 今日最佳
  2. 造作吧,Python快速入门!
  3. 程序员必知的 Python 陷阱与缺陷列表
  4. linux浏览器不能播放音频文件夹,在html中插入音频文件在浏览器中播放音频文件的兼容性问题...
  5. php+转义实体字符,PHP针对HTML实体字符的转义函数
  6. javq接口_Java为什么要使用接口_java接口怎么使用
  7. java弹窗 触发事件_关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法...
  8. qbuttongroup如何都不选中_全程马拉松,半程马拉松该如何跑?很多人都不知道这些细节...
  9. windows制作定时关机脚本_自动关机、自动打开程序… 让Windows自动执行任何操作...
  10. java跳转画面后画面白了_如何跳转指定页面后再次跳转到另一页面或原来的页面...