传送门1
传送门2
思路:
关于证明
算是bzoj1443的强化版吧
但我是先写的这道题再写的bzoj1443,所以刚开始比较懵逼
二分图中的点是空格、与空格坐标和的奇偶相同的黑点、坐标和奇偶不同的白点
还有一点要注意的是每次删点后是不用再还原回去的,因为被移动的黑点(白点)已经符合二分图中点的条件了
如果蛋蛋走前时先手必胜且上一次兔兔走前时先手必胜,答案加1(s)
代码:

#include<cstdio>
#include<cstring>
using namespace std;
int n,m,k,s,t,cnt,tot;
int a[43][43],first[1605],id[43][43],belong[1605],ans[1005];
int dx[4]={0,0,-1,1},dy[4]={1,-1,0,0};
bool vis[1605],del[1605],ok[1005];
struct edge{int v,next;
}e[10000];
int in()
{char c=getchar();while (c!='O'&&c!='X'&&c!='.') c=getchar();if (c=='O') return 1;if (c=='X') return -1;return 0;
}
void add(int u,int v){e[++tot]=(edge){v,first[u]};first[u]=tot;}
int find(int x)
{if (del[x]) return 0;for (int i=first[x];i;i=e[i].next)if (!vis[e[i].v]&&!del[e[i].v]){vis[e[i].v]=1;if (!belong[e[i].v]||find(belong[e[i].v])){belong[e[i].v]=x,belong[x]=e[i].v;return 1;}}return 0;
}
main()
{scanf("%d%d",&n,&m);for (int i=1;i<=n;++i)for (int j=1;j<=m;++j){a[i][j]=in();if (!a[i][j]) s=i,t=j;}for (int i=1;i<=n;++i)for (int j=1;j<=m;++j)if (((i+j&1)!=(s+t&1)&&a[i][j]>0)||((i+j&1)==(s+t&1)&&a[i][j]<=0))id[i][j]=++cnt;for (int i=1;i<=n;++i)for (int j=1;j<=m;++j)if (id[i][j]){for (int k=0;k<4;++k)if (id[i+dx[k]][j+dy[k]])add(id[i][j],id[i+dx[k]][j+dy[k]]);}for (int i=1;i<=cnt;++i)if (!belong[i])memset(vis,0,sizeof(vis)),find(i);scanf("%d",&k);int nx,ny;for (int i=1;i<=k<<1;++i){del[id[s][t]]=1;if (belong[id[s][t]]){belong[belong[id[s][t]]]=0;memset(vis,0,sizeof(vis));ok[i]=!find(belong[id[s][t]]);if (!(i&1)&&ok[i]&&ok[i-1])ans[++ans[0]]=i>>1;}scanf("%d%d",&s,&t);}printf("%d\n",ans[0]);for (int i=1;i<=ans[0];++i) printf("%d\n",ans[i]);
}

【BZOJ2437】【codevs1949】兔兔与蛋蛋游戏,博弈+二分图匹配相关推荐

  1. BZOJ2437 [Noi2011]兔兔与蛋蛋 【博弈论 + 二分图匹配】

    题目链接 BZOJ2437 题解 和JSOI2014很像 只不过这题动态删点 如果我们把空位置看做\(X\)的话,就会发现我们走的路径是一个\(OX\)交错的路径 然后将图二分染色,当前点必胜,当且仅 ...

  2. P4055 [JSOI2009]游戏(二分图匹配+博弈)

    P4055 [JSOI2009]游戏 对于一个网格,上面有一些障碍物不能走,A选择起点,然后B走到相邻的四个格子之一,然后轮流移动不能移动的一方失败.求解所有可以赢的初始位置. 首先对于这个问题要想到 ...

  3. 【BZOJ1443】游戏Game,博弈+二分图匹配

    传送门 思路: 很巧妙的思路 将二分图的匹配与博弈相联系 给出定理: 若二分图中去掉起点后仍存在最大匹配(与先前的最大匹配数相等),那么先手必输:反之先手必胜 关于证明,我昨天晚上和今天中午想了很久, ...

  4. 【BZOJ - 1059】矩阵游戏(二分图匹配,建图,最小边覆盖)

    题干: 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换 ...

  5. [ZJOI2007]矩阵游戏(二分图匹配、匈牙利算法)

    小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的). 每次可以对该矩阵进行两种操作: 行交换操作 ...

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

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

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

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

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

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

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

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

最新文章

  1. Codeforces 919 D Substring
  2. Struts2学习总结一
  3. 线性表的顺序存储结构(数据结构篇)
  4. 假如王撕葱是程序员。。。
  5. c语言for循环可以初始化多个变量么_C8循环
  6. VC制作 Windows服务 安装包
  7. matlab误差分析报告,误差分析实验报告
  8. PointCNN程序简介
  9. 为什么说甲骨文裁员也属无奈之举?
  10. ios设备的弹窗页面,光标错位,光标乱跳
  11. RabbitMQ 使用的AMQP模型解析
  12. Linux操作系统学习笔记【入门必备】
  13. 医疗APP有哪些功能
  14. 【数学建模】经典简单例题实例1
  15. hibernate之SessionFactory和Session
  16. 附录002《 Git 中的重要概念》
  17. 全球及中国散热产业产销规模及投资盈利预测报告2021版
  18. 备战数学建模9-层次分析法模型
  19. 初学css能做的实战 登录页面制作
  20. 如何用命令关闭/启动mysql服务

热门文章

  1. 【华为云技术分享】Linux内核发展史 (3)
  2. 设计模式的C语言应用-访问者模式-第九章
  3. 使用CSE轻松实现接口访问控制
  4. android studio moudel,Android Studio将module变为library
  5. Spark之StructuredStreaming
  6. 红橙Darren视频笔记 手写ButterKnife(Android Studio4.2.2 gradle-6.7.1 )
  7. 查看mysql是否归档的命令_查看oracle数据库是否为归档模式
  8. 查看在Ubuntu上打印的大型JSON文件
  9. ubuntu安装常用软件(比如python、搜狗拼音、cudnn等)
  10. ant java 外部jar包_java – 在使用Ant的新jar文件构建中包括外部jar文件