【题解】JSOI2009游戏
真的没想到、、、果然反应太迟钝,看到题目毫无思路,一点联想都没有。
按照网上博客的说法:一眼棋盘染色二分->二分图->最大匹配->BINGO?果然我还是太弱了……
我们将棋盘黑白染色,相邻两点之间的转移转化为图上的边。根据最大匹配的定义,如果我们最开始将棋子放在一个未匹配的点上,一定会到达一个匹配点(不然若到达了另一个未匹配点就说明还有可以扩张的匹配。)此后,因为已经是最大匹配所以不存在可以增广的交替路。所以这样先手一定会比后手多走一步,获得胜利。所以问题转化为:有哪些点不在最大匹配上?注意最大匹配的情况数是很多的。
所以我们枚举每一个点是否可以不被纳入最大匹配,若可以,说明是一个先手必胜点。
#include <bits/stdc++.h>
using namespace std;
#define maxn 205
int n, m, a[maxn][maxn], link[maxn * ];
int Map[maxn * ][], ans[maxn * ][];
int cnt, tot, id[maxn][maxn];
int px[] = { , , -, }, py[] = { , , , - };
bool vis[maxn * ];
char s[maxn]; int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} bool dfs(int u)
{
for(int i = ; i <= Map[u][]; i ++)
{
int v = Map[u][i];
if(vis[v]) continue; vis[v] = ;
if(!link[v] || dfs(link[v]))
{ link[v] = u, link[u] = v; return ; }
}
return ;
} void add(int u, int v) { Map[u][++ Map[u][]] = v; } int main()
{
n = read(), m = read();
for(int i = ; i <= n; i ++)
for(int j = ; j <= m; j ++)
id[i][j] = ++ cnt;
for(int i = ; i <= n; i ++)
{
scanf("%s", s + );
for(int j = ; j <= n; j ++)
if(s[j] == '#') a[i][j] = ;
}
for(int i = ; i <= n; i ++)
for(int j = ; j <= m; j ++)
if(!a[i][j] && (i + j) % )
for(int k = ; k <= ; k ++)
{
int mx = i + px[k], my = j + py[k];
if(mx >= && mx <= n && my >= && my <= m && !a[mx][my])
{
add(id[i][j], id[mx][my]);
add(id[mx][my], id[i][j]);
}
}
for(int i = ; i <= n; i ++)
for(int j = ; j <= m; j ++)
if(!a[i][j] && (i + j) % )
{
memset(vis, , sizeof(vis));
if(dfs(id[i][j])) cnt ++;
}
for(int i = ; i <= n; i ++)
for(int j = ; j <= m; j ++)
if(!a[i][j])
{
memset(vis, , sizeof(vis)); vis[id[i][j]] = ;
if(!link[id[i][j]] || dfs(link[id[i][j]]))
{
ans[++ tot][] = i, ans[tot][] = j;
link[id[i][j]] = ;
}
}
if(!tot) printf("LOSE");
else
{
printf("WIN\n");
for(int i = ; i <= tot; i ++)
printf("%d %d\n", ans[i][], ans[i][]);
}
return ;
}
【题解】JSOI2009游戏的更多相关文章
- BZOJ1443: [JSOI2009]游戏Game
如果没有不能走的格子的话,和BZOJ2463一样,直接判断是否能二分图匹配 现在有了一些不能走的格子 黑白染色后求出最大匹配 如果是完备匹配,则无论如何后手都能转移到1*2的另一端,故先手必输 否则的 ...
- JSOI2009 游戏
1443: [JSOI2009]游戏Game Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 557 Solved: 251[Submit][Stat ...
- BZOJ:1443: [JSOI2009]游戏Game
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1443 反正不看题解我是完全想不出系列…… 先把棋盘黑白染色,也就是同一对角线上颜色相同,使 ...
- BZOJ1443 [JSOI2009]游戏Game 【博弈论 + 二分图匹配】
题目链接 BZOJ1443 题解 既然是网格图,便可以二分染色 二分染色后发现,游戏路径是黑白交错的 让人想到匹配时的增广路 后手要赢[指移动的后手],必须在一个与起点同色的地方终止 容易想到完全匹配 ...
- BZOJ:[JSOI2009]游戏Game【二分图匹配乱搞】
题目大意:n*m的棋盘,其中有些区域是禁区,两个人在棋盘上进行博弈,后手选择棋子的初始位置,然后先后手轮流将棋子往上下左右移动,走过的区域不能再走,问能否有一个位置使得后手必胜 Input 输入数据首 ...
- [JSOI2009]游戏Game
Description Input 输入数据首先输入两个整数N,M,表示了迷宫的边长. 接下来N行,每行M个字符,描述了迷宫. Output 若小AA能够赢得游戏,则输出一行"WIN&quo ...
- 【BZOJ】1443: [JSOI2009]游戏Game
[算法]博弈论+二分图匹配(最大流) [题解]方格图黑白染色得到二分图, 二分图博弈:当起点不属于某个最大匹配时,后手必胜. 问题转化为那些点不属于某个最大匹配. 先找到一个最大匹配,非匹配点加入答案 ...
- [JSOI2009]游戏 二分图博弈
题面 题面 题解 二分图博弈的模板题,只要会二分图博弈就可以做了,可以当做板子打. 根据二分图博弈,如果一个点x在某种方案中不属于最大匹配,那么这是一个先手必败点. 因为对方先手,因此我们就是要找这样 ...
- 【BZOJ1443】[JSOI2009]游戏Game(二分图+博弈)
BZOJ 题意: 给出一个\(n*m\)的网格,其中有一些障碍点. 现在两个人玩游戏,首先先手选定一个点,然后从后手开始轮流移动,不能移动者即输掉这次游戏. 规定不能移动到那些之前已经到过的格子上. ...
随机推荐
- java的动态验证码单线设计
1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...
- php数组常用函数总结
数组的创建 $arr1 = [ "姓名" => "张三", "籍贯" => "上海", "年龄&q ...
- Spark-源码-Spark-Submit 任务提交
Spark 版本:1.3 调用shell, spark-submit.sh args[] 首先是进入 org.apache.spark.deploy.SparkSubmit 类中调用他的 main() ...
- mysql5.7数据库与5.7之前版本比较
数据库初始化方式变更 <5.7 版本 mysql_install_db >5.7 版本 bin/mysqld --initialize --user =mysql --basedir=/u ...
- python并发编程之多进程、多线程、异步、协程、通信队列Queue和池Pool的实现和应用
什么是多任务? 简单地说,就是操作系统可以同时运行多个任务.实现多任务有多种方式,线程.进程.协程. 并行和并发的区别? 并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任 ...
- latex02-LaTeX源文件的基本结构
1.一个latex文件有且仅有一个document环境 %后表示注释 2.latex的导言区用于全局设置. 例如:title\author\date 加入空行是结构更加清晰 为了能正确的使用标题信息, ...
- 关于VSCode如何缩进两个空格
使用VSCode编写vue的时候,由于缩进问题经常报错.(默认缩进4个空格,实际规范上是两个空格) 更改VSCode的缩进格式. 但是此时你在编写代码的时候却发现任然缩进4格,此时因为vscode默认 ...
- spark优化系列一:参数介绍
1 spark on yarn常用属性介绍 属性名 默认值 属性说明 spark.yarn.am.memory 512m 在客户端模式(client mode)下,yarn应用master使用的内存数 ...
- springmvc springboot 跨域问题(CORS)
官方文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cors.html springmvc s ...
- Hive数据倾斜和解决办法
转自:https://blog.csdn.net/xinzhi8/article/details/71455883 操作: 关键词 情形 后果 Join 其中一个表较小,但是key集中 ...