真的没想到、、、果然反应太迟钝,看到题目毫无思路,一点联想都没有。

按照网上博客的说法:一眼棋盘染色二分->二分图->最大匹配->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游戏的更多相关文章

  1. BZOJ1443: [JSOI2009]游戏Game

    如果没有不能走的格子的话,和BZOJ2463一样,直接判断是否能二分图匹配 现在有了一些不能走的格子 黑白染色后求出最大匹配 如果是完备匹配,则无论如何后手都能转移到1*2的另一端,故先手必输 否则的 ...

  2. JSOI2009 游戏

    1443: [JSOI2009]游戏Game Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 557  Solved: 251[Submit][Stat ...

  3. BZOJ:1443: [JSOI2009]游戏Game

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1443 反正不看题解我是完全想不出系列…… 先把棋盘黑白染色,也就是同一对角线上颜色相同,使 ...

  4. BZOJ1443 [JSOI2009]游戏Game 【博弈论 + 二分图匹配】

    题目链接 BZOJ1443 题解 既然是网格图,便可以二分染色 二分染色后发现,游戏路径是黑白交错的 让人想到匹配时的增广路 后手要赢[指移动的后手],必须在一个与起点同色的地方终止 容易想到完全匹配 ...

  5. BZOJ:[JSOI2009]游戏Game【二分图匹配乱搞】

    题目大意:n*m的棋盘,其中有些区域是禁区,两个人在棋盘上进行博弈,后手选择棋子的初始位置,然后先后手轮流将棋子往上下左右移动,走过的区域不能再走,问能否有一个位置使得后手必胜 Input 输入数据首 ...

  6. [JSOI2009]游戏Game

    Description Input 输入数据首先输入两个整数N,M,表示了迷宫的边长. 接下来N行,每行M个字符,描述了迷宫. Output 若小AA能够赢得游戏,则输出一行"WIN&quo ...

  7. 【BZOJ】1443: [JSOI2009]游戏Game

    [算法]博弈论+二分图匹配(最大流) [题解]方格图黑白染色得到二分图, 二分图博弈:当起点不属于某个最大匹配时,后手必胜. 问题转化为那些点不属于某个最大匹配. 先找到一个最大匹配,非匹配点加入答案 ...

  8. [JSOI2009]游戏 二分图博弈

    题面 题面 题解 二分图博弈的模板题,只要会二分图博弈就可以做了,可以当做板子打. 根据二分图博弈,如果一个点x在某种方案中不属于最大匹配,那么这是一个先手必败点. 因为对方先手,因此我们就是要找这样 ...

  9. 【BZOJ1443】[JSOI2009]游戏Game(二分图+博弈)

    BZOJ 题意: 给出一个\(n*m\)的网格,其中有一些障碍点. 现在两个人玩游戏,首先先手选定一个点,然后从后手开始轮流移动,不能移动者即输掉这次游戏. 规定不能移动到那些之前已经到过的格子上. ...

随机推荐

  1. canvas画布——画八卦图

    实例 创建一个圆形: var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d") ...

  2. maven-认识

    1.认识maven maven是强大的项目构建工具,也是依赖管理工具 使用maven前提是安装JDK maven非常重要配置文件:setting.xml 3.maven工程 maven工程的约束: 主 ...

  3. phpstudy启动时Apache启动不了

    打开cmd,输入:D:\phpStudy\PHPTutorial\Apache\bin\httpd.exe -t 回车,即显示错误信息 说是我们的有一个文件目录不存在或者不可读取, 出现这个一般有两种 ...

  4. PHP (Yii2) 自定义业务异常类(可支持返回任意自己想要的类型数据)

    public function beforeAction($action) { return parent::beforeAction($action); } public function runA ...

  5. PHP(YII2实现) 微信网页授权

    参考地址 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 实现步骤分析: 获取code->access ...

  6. python-集合类型

    集合具有唯一性(集合中的元素各不相同),无序性,确定性(集合中的元素是不可改变的,不能是列表,字典以及集合本身) 1.add(self, *args, **kwargs),union(self, *a ...

  7. itchat和matplotlib的结合使用爬取微信信息

    前几天无意中看到了一片文章,<一件有趣的事:我用 Python 爬了爬自己的微信朋友>,这篇文章写的是使用python中的itchat爬取微信中朋友的信息,其中信息包括,昵称.性别.地理位 ...

  8. ChemDraw Std 14性价比最高版本,即将下架

    虽然ChemDraw Std 14是ChemOffice®14的基础组件,但是基础功能涵盖全面,是教育专供产品.根据官方最新消息ChemDraw系列软件产品线将进行全面的升级,ChemOffice®1 ...

  9. html5学得好不好,看掌握多少标签

    html5学得好不好,看掌握多少标签 已回复 会员ID:wi701329 保密 62岁 时间:2016-06-28 06:52:49 html5你了解了多少?如果你还是入门阶段的话,或者还是一知半解的 ...

  10. MySQL高可用之MHA切换测试(switchover & failover)

      Preface       I've installed MasterHA yesterday,Now let's test the master-slave switch and failove ...