二分图博弈果然都是一个套路,必经点必胜,非必经点必败,

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

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <cmath>
 6 #define N 1601
 7 using namespace std;
 8 int e=1,head[N];
 9 struct edge{int v,next;}ed[N*4];
10 void add(int u,int v){ed[e].v=v;ed[e].next=head[u];head[u]=e++;}
11 int pp[N],del[N],id[41][41];
12 bool vis[N],ans[N];
13 bool find(int x){
14     for(int i=head[x];i;i=ed[i].next){
15         int v=ed[i].v;
16         if(del[v]||vis[v])continue;vis[v]=1;
17         if(!pp[v]||find(pp[v])){
18             pp[v]=x;pp[x]=v;
19             return 1;
20         }
21     }return 0;
22 }
23 int a[41][41],be,n,m,T,sx,sy,tot1,tot2,tot;
24 char ch[41];
25 bool check(int i,int j){return ((i+j)&1)^a[i][j]==be;}
26 int f[N],f_cnt;
27 int main(){
28     scanf("%d%d",&n,&m);
29     for(int i=1;i<=n;i++){
30         scanf("%s",ch+1);
31         for(int j=1;j<=m;j++)
32             if(ch[j]=='O')a[i][j]=1;
33             else if(ch[j]=='X')a[i][j]=0;
34             else sx=i,sy=j;
35     }
36     be=(sx+sy)&1;
37     for(int i=1;i<=n;i++)
38         for(int j=1;j<=m;j++)if(check(i,j))
39             if(a[i][j])id[i][j]=++tot1;
40             else id[i][j]=++tot2;
41     for(int i=1;i<=n;i++)
42         for(int j=1;j<=m;j++)if(check(i,j)&&(!a[i][j]))
43             id[i][j]+=tot1;
44     tot=tot1+tot2;
45     for(int i=1;i<=n;i++)
46         for(int j=1;j<=m;j++)if(id[i][j]){
47             if(id[i+1][j])add(id[i][j],id[i+1][j]);
48             if(id[i][j+1])add(id[i][j],id[i][j+1]);
49             if(id[i-1][j])add(id[i][j],id[i-1][j]);
50             if(id[i][j-1])add(id[i][j],id[i][j-1]);
51         }
52     for(int i=1;i<=tot1;i++){
53         memset(vis,0,sizeof vis);
54         find(i);
55     }
56     scanf("%d",&T);T<<=1;
57     for(int i=1,x,y;i<=T;i++){
58         int now=id[sx][sy],p=pp[now];
59         del[now]=1;pp[now]=pp[p]=0;
60         if(!p)ans[i]=0;
61         else{
62             memset(vis,0,sizeof vis);
63             ans[i]=find(p)^1;
64         }
65         scanf("%d%d",&sx,&sy);
66     }
67     for(int i=1;i<=T;i+=2)
68         if(ans[i]&&ans[i+1])f[++f_cnt]=(i+1)>>1;
69     printf("%d\n",f_cnt);
70     for(int i=1;i<=f_cnt;i++)
71         printf("%d\n",f[i]);
72     return 0;
73 }

View Code

转载于:https://www.cnblogs.com/Ren-Ivan/p/8352969.html

bzoj2437 [Noi2011]兔兔与蛋蛋相关推荐

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

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

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

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

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

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

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

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

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

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

  6. iPhonexr安兔兔html5测试,给大家科普下iphonexr苹果手机安兔兔跑分多少分

    现在越来越多的小伙伴对于iphonexr苹果手机安兔兔跑分多少分这方面的问题开始感兴趣,因为大家现在都是想要熟知,学到这当中的各项功能,那么既然现在大家都想要知道iphonexr苹果手机安兔兔跑分多少 ...

  7. android 手机跑分,安兔兔安卓手机跑分性能榜公布:第一名实至名归?

    3月5日消息,安兔兔官方放出了2019年2月份国内安卓手机的性能跑分排行榜.从榜单中我们可以看到排名前三的分别是:小米9.联想Z5 Pro GT 855版.红魔Mars电竞手机. 不出所料,前三名都是 ...

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

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

  9. 小米redmi_安兔兔公布12月安卓手机性能榜:小米、Redmi领衔

    1月5日,安兔兔官方发布了"2020年12月份安兔兔Android手机性能排行"榜单,包括旗舰安卓手机与中端安卓手机两个类别.榜单显示,在旗舰手机中,性能排名第一的是刚刚发布不久的 ...

  10. 最新处理器排名_安兔兔Android处理器天梯榜发布:最强的还是它

    点击上方蓝字[安兔兔]关注我 文章每天不断更! 为了让大家对自己使用的手机处理器性能有一个更直观的认知,安兔兔今天正式发布了Android手机处理器天梯榜.由于安兔兔V8增加了存储和刷新率在总分方面所 ...

最新文章

  1. 为Windows git 配置比较工具为beyond compare
  2. Tomcat的热部署和重新启动和重新部署的关系
  3. 寻人 | 一个有趣的职业可能性,与你分享
  4. 如何给开源项目提过 PR 呢?其实很简单
  5. PostgreSQL 最佳实践 - 水平分库(基于plproxy)
  6. P2167 [SDOI2009]Bill的挑战
  7. VC 实现文件夹属性的获取与更改
  8. gatsby_如何将静态Gatsby应用程序部署到Heroku
  9. 姓名抽签器c语言,在线抽签器
  10. jieba自定义分词规则与多进程切词
  11. 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin
  12. java怎样用类模板创建对象_java入门(十四) | 面向对象(OOP)之类和对象
  13. JAVA JSON转XML
  14. EnlightenGAN: Deep Light Enhancement without Paired Supervision论文阅读笔记
  15. Hibernate学习-14:实体之间的关系及其配置,级联操作
  16. Possibly consider using a shorter maxLifetime value.问题处理
  17. 【信息检索导论】第三章 容错式检索
  18. 组策略 gpedit.msc 及修复“无法为文件 appv.admx (*.admx)找到适当的资源文件(错误=2)”报错
  19. Linux线程基本知识
  20. 天天生鲜项目——用户订单页

热门文章

  1. 高斯低通滤波 matlab_一维和二维高斯函数及其一阶和二阶导数
  2. mysql数据库技术_MySQL数据库技术(13)[组图]_MySQL
  3. 黑马博客——详细步骤(九)项目功能的实现之mongoDB数据库添加账号
  4. 政史系列:《社会契约论》读书笔记
  5. android 梯形按钮_PLC编程入门梯形图实例讲解
  6. 腾讯T4梳理的必备笔记:自动化测试必掌握的30个核心知识点
  7. 过来人的亲身经验告诉你,如何从菜鸟晋升月薪过万的测试工程师
  8. 软件测试必学之python+unittest+requests+HTMLRunner编写接口自动化测试集
  9. 前台 时不时报 could not proxy request_长春中考成绩不理想可以报的高中
  10. php基础 简书,PHP的基础(一)