1443: [JSOI2009]游戏Game

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1077  Solved: 484
[Submit][Status][Discuss]

Description

Input

输入数据首先输入两个整数N,M,表示了迷宫的边长。 接下来N行,每行M个字符,描述了迷宫。

Output

若小AA能够赢得游戏,则输出一行"WIN",然后输出所有可以赢得游戏的起始位置,按行优先顺序输出 每行一个,否则输出一行"LOSE"(不包含引号)。

Sample Input

3 3
.##
...
#.#

Sample Output

WIN
2 3
3 2

HINT

对于100%的数据,有1≤n,m≤100。 对于30%的数据,有1≤n,m≤5。

Source

分析:

这是一个网格图,然后每个状态只能向相邻的状态转移,并且输赢和路径长度的奇偶性有关系,所以考虑黑白染色,也就是状态只能向不同的颜色转移,那么就是一个二分图...

如果二分图求完最大匹配之后不存在非匹配点,那么一定不存在必胜策略,因为我们求完最大匹配之后,一定不存在增广路,只存在交错路,对方从匹配点出发,最后一定可以找到一条匹配边作为结束,所以先手必胜...

那么也就是说,从一个非匹配点出发,一定是一个后手必胜的策略,但是非匹配点并不是全部答案,因为并不是值存在一组最大匹配,所以从每个非匹配点出发,寻找交错路,然后访问到的和非匹配点处于同一集合的点都是答案...

代码:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
//by NeighThorn
using namespace std;const int maxn=200+5,maxm=20000+5;int n,m,cnt,tot,f[maxn][maxn],hd[maxm],to[maxm<<1],nxt[maxm<<1];
int pre[maxm],vis[maxm],co[maxm],ans[maxm];
int mv[2][2]={0,1,1,0};char mp[maxn][maxn];inline void add(int x,int y){to[cnt]=y;nxt[cnt]=hd[x];hd[x]=cnt++;
}inline bool dfs(int x){for(int i=hd[x];i!=-1;i=nxt[i])if(!vis[to[i]]){vis[to[i]]=1;if(pre[to[i]]==-1||dfs(pre[to[i]])){return pre[to[i]]=x,true;}}return false;
}inline void find(int x){if(ans[x])return;ans[x]=1;for(int i=hd[x];i!=-1;i=nxt[i])if(pre[to[i]]!=-1)find(pre[to[i]]);
}signed main(void){scanf("%d%d",&n,&m);memset(hd,-1,sizeof(hd));memset(pre,-1,sizeof(pre));for(int i=1;i<=n;i++)scanf("%s",mp[i]+1);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(mp[i][j]=='.')f[i][j]=++tot,co[f[i][j]]=(i^j)&1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(mp[i][j]=='.')    for(int k=0;k<2;k++){int x=i+mv[k][0],y=j+mv[k][1];if(f[x][y])add(f[i][j],f[x][y]),add(f[x][y],f[i][j]);}for(int i=1;i<=tot;i++)if(co[i])memset(vis,0,sizeof(vis)),cnt+=dfs(i);if(cnt*2==tot){puts("LOSE");return 0;}puts("WIN");for(int i=1;i<=tot;i++)if(pre[i]!=-1)pre[pre[i]]=i;for(int i=1;i<=tot;i++)if(pre[i]==-1)find(i);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(ans[f[i][j]])printf("%d %d\n",i,j);return 0;
}

  


By NeighThorn

转载于:https://www.cnblogs.com/neighthorn/p/6509504.html

BZOJ 1443: [JSOI2009]游戏Game相关推荐

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

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

  2. [bzoj 1452] [JSOI2009]Count

    [bzoj 1452] [JSOI2009]Count Description Input Output Sample Input Sample Output 1 2 HINT 二维树状数组裸题,建立 ...

  3. BZOJ 1444: [Jsoi2009]有趣的游戏

    1444: [Jsoi2009]有趣的游戏 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1114  Solved: 386 [Submit][Sta ...

  4. BZOJ 1444: [Jsoi2009]有趣的游戏 [AC自动机 高斯消元]

    1444: [Jsoi2009]有趣的游戏 题意:每种字母出现概率\(p_i\),有一些长度len的字符串,求他们出现的概率 套路DP的话,\(f[i][j]\) i个字符走到节点j的概率,建出转移矩 ...

  5. BZOJ:4820: [Sdoi2017]硬币游戏BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)

    1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以A ...

  6. BZOJ 1444 [JSOI2009]有趣的游戏 (Trie图/AC自动机+矩阵求逆)

    题目大意:给你$N$个长度相等且互不相同的模式串,现在有一个字符串生成器会不断生成字符,其中每个字符出现的概率是$p_{i}/q_{i}$,当生成器生成的字符串包含了某个模式串,则拥有该模式串的玩家胜 ...

  7. BZOJ 1444 [JSOI2009]有趣的游戏 (AC自动机、概率与期望DP、矩阵乘法)

    诶这题洛谷居然没有??? 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1444 题解: 我见到主要有两种做法. 一是矩阵乘法.设\(d ...

  8. BZOJ P4554 [Tjoi2016Heoi2016]游戏

    BZOJ P4554 [Tjoi2016&Heoi2016]游戏 题目 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个 ...

  9. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

最新文章

  1. MVC入门学习笔记(十)
  2. Windows 08 R2_组策略
  3. Spring Boot中普通类获取Spring容器中的Bean
  4. 在想要放弃的时候想想是什么在支撑着你走到了这一步。
  5. OpenCV学习之Scalar数据类型
  6. 【Tomcat】如何解决catalina.out文件过大的问题
  7. 如何自动打开function对应的ABAP class
  8. c#滚动条创建实例,多线程
  9. linux中mysql与eclipse_Linux下eclipse CDT及mysql安装,c++访问mysql数据库
  10. 用jquery或js实现三个div自动循环轮播
  11. [Java] 蓝桥杯PREV-3 历届试题 带分数
  12. MultipartFile多文件上传
  13. Excel 2010 VBA 入门 049 根据身份证号码判断性别(left,right,mid,len)
  14. webstorm 移动到末尾并且换行快捷键
  15. android x86安装到硬盘不能启动,PC下安装androidx86一些问题的解决方法,gui start
  16. mysql字段替换_mysql 替换字段部分内容及mysql 替换函数replace()
  17. 海康摄像机如何用第三方域名/外网固定IP方式远程观看?--官方文档记录
  18. 64位操作系统安装——Linux(Ubuntu 16.04)+Windows7+iNode
  19. 全志T507操作小技巧连载2-T507以太网配置方法- 飞凌嵌入式国产全志T507开发板
  20. linux开放目录注意

热门文章

  1. java 集合差运算_用一个参数的JAVA程序实现集合的交并差运算
  2. JavaScript DOM操作表格及样式
  3. 从针对接口编程到依赖注入
  4. android中TextView显示中文发生乱码的问题
  5. 背包问题教程-01背包,完全背包,多重背包,混合背包 收藏
  6. thrift RPC接口请求超时
  7. 学习一段深有感悟的讲话
  8. time_wait状态产生的原因,危害,如何避免
  9. STM32的:外部中断线EXTIN和外部中断向量EXTIN_IRQn和中断服务程序入口EXTIN_IRQHandler详解
  10. NULL、0、nullptr的区别?