好题。

首先看到棋盘,先黑白染色。

然后就是二分图的经典模型。

考虑最特殊的情况,完美匹配,那么先手必胜,

因为无论如何,先手走匹配边,后手无论走哪条边,总有对应的匹配边。

如果在不在最大匹配中出发,先手无论如何会走到最大匹配中,然后后手顺着匹配走,一定能胜利。

(万一又走到非最大匹配中呢,显然这样我们会找到一条增广路,与最大匹配不符)。

但是最大匹配不止又一种,所以我们需要判断是否在最大匹配中,需要寻找交错路。

如果在最大匹配中出发,显然先手必胜,(如果走到非最大匹配的点上,那么就相当于找到一条交错路可以替换,反而让非最大匹配换到了最大匹配中)

然后就相当于求一定不在最大匹配中的点了。

#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i) int mov[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
vector <int> v[10005];
int id[105][105],a[105][105],n,m,cnt,vis[10005],linker[10005];
char s[105];
int ans[10005][2],tot=0,g[10005][10]; int dfs(int x)
{
for (int i=1;i<=g[x][0];++i)
{
int t=g[x][i];
if (vis[t]) continue;
vis[t]=1;
if (!linker[t]||dfs(linker[t]))
{
linker[t]=x;
linker[x]=t;
return 1;
}
}
return 0;
} int main()
{
int n,m;
scanf("%d%d",&n,&m);
F(i,1,n) F(j,1,m) id[i][j]=++cnt;
F(i,1,n)
{
scanf("%s",s+1);
F(j,1,m)
if (s[j]=='#') a[i][j]=1;
}
F(i,1,n) F(j,1,m)
if (!a[i][j]&&((i+j)%2)){
int tx,ty;
F(k,0,3)
{
tx=i+mov[k][0];ty=j+mov[k][1];
if (tx>=1&&tx<=n&&ty>=1&&ty<=m&&!a[tx][ty])
{
g[id[i][j]][++g[id[i][j]][0]]=id[tx][ty];
g[id[tx][ty]][++g[id[tx][ty]][0]]=id[i][j];
}
}
}
int cnt=0;
F(i,1,n) F(j,1,m) if (!a[i][j]&&(i+j)%2)
{
memset(vis,0,sizeof vis);
if (dfs(id[i][j])) cnt++;
}
F(i,1,n) F(j,1,m) if (!a[i][j])
{
memset(vis,0,sizeof vis);
vis[id[i][j]]=1;
if (!linker[id[i][j]]||dfs(linker[id[i][j]]))
{
tot++;
ans[tot][0]=i;ans[tot][1]=j;
linker[id[i][j]]=0;
}
}
if (!tot) printf("LOSE\n");
else
{
printf("WIN\n");
F(i,1,tot) printf("%d %d\n",ans[i][0],ans[i][1]);
}
}

  

BZOJ 1443 [JSOI2009]游戏Game ——博弈论的更多相关文章

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

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

  2. BZOJ.1443.[JSOI2009]游戏Game(二分图博弈 匈牙利)

    题目链接 \(Description\) 一个\(N*M\)的有障碍的棋盘,先手放置棋子后,从后手开始轮流移动棋子,不能走重复的位置,不能移动的输.求在哪些位置放棋子是先手必胜的. \(Solutio ...

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

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

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

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

  5. BZOJ1443: [JSOI2009]游戏Game

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

  6. JSOI2009 游戏

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

  7. BZOJ 1444:[JSOI2009]有趣的游戏

    BZOJ 1444:[JSOI2009]有趣的游戏 题目链接 首先我们建出Trie图,然后高斯消元. 我们设\(f_i\)表示经过第\(i\)个点的期望次数: \[ f_x=\sum i\cdot p ...

  8. 【BZOJ1022】小约翰的游戏(博弈论)

    [BZOJ1022]小约翰的游戏(博弈论) 题面 BZOJ 题解 \(Anti-SG\)游戏的模板题目. #include<iostream> #include<cstdio> ...

  9. 【BZOJ1188】分裂游戏(博弈论)

    [BZOJ1188]分裂游戏(博弈论) 题面 BZOJ 洛谷 题解 这道题目比较神仙. 首先观察结束状态,即\(P\)状态,此时必定是所有的豆子都在最后一个瓶子中. 发现每次的转移一定是拿出一棵豆子, ...

随机推荐

  1. LR11安装和配置教程

    LoadRunner11安装教程 #安装包文件.汉化文件.破解文件,可以自行百科来获得,这边仅提供安装步骤. 1.前期准备1)安装前需要关闭防火墙及杀毒软件2)安装路径不能包含中文字符,同时需要以管理 ...

  2. HDU 4044 GeoDefense (树形DP,混合经典)

    题意: 给一棵n个节点的树,点1为敌方基地,叶子结点都为我方阵地.我们可以在每个结点安放炸弹,每点至多放一个,每个结点有ki种炸弹可选,且每种炸弹有一个花费和一个攻击力(1点攻击力使敌人掉1点hp). ...

  3. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'userId' not found. Available parameters are [arg1, arg0, param1, param2]

    2018-06-27 16:43:45.552  INFO 16932 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : ...

  4. Codeforces Round #318 (Div. 2) D Bear and Blocks (数学)

    不难发现在一次操作以后,hi=min(hi-1,hi-1,hi+1),迭代这个式子得到k次操作以后hi=min(hi-j-(k-j),hi-k,hi+j-(k-j)),j = 1,2,3... 当k ...

  5. BC div2补题以及 复习模除 逆元__BestCoder Round #78 (div.2)

    第一题没话说 智商欠费 加老柴辅导终于过了 需要在意的是数据范围为2的63次方-1 三个数相加肯定爆了 四边形的定义 任意边小于其余三边之和 换句话说就是 最长边小于其余三边之和 这样的话问题转化为 ...

  6. ant design table td 文字显示过长添加省略号、ant 文字过长时添加tootip提示

    方法1: overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit ...

  7. Pomodoro APP

    2015.5.23 UITableView 的数据源刷新问题 本次发过来的版本五,实现了活动清单列表(AllEventsTableViewController).活动详情(AllEventsViewC ...

  8. bcdboot应用

    1.下个win8 的pe,功能齐全的.2.CMD执行命令 bcdboot c:\windows /s x: /f all c代表c盘即win所在分区盘符.s,命令参数,引导另存到其他地方.x,某储存引 ...

  9. C++ STL容器之 map

    map 是一种有序无重复的关联容器. 关联容器与顺序容器不同,他们的元素是按照关键字来保存和访问的,而顺序元素是按照它们在容器中的位置保存和访问的. map保存的是一种 key - value 的pa ...

  10. kvm虚拟迁移

    1. 虚拟迁移 迁移: 系统的迁移是指把源主机上的操作系统和应用程序移动到目的主机,并且能够在目的主机上正常运行.在没有虚拟机的时代,物理机之间的迁移依靠的是系统备份和恢复技术.在源主机上实时备份操作 ...