传送门

把这个图给黑白染色然后建二分图,如果有完备匹配那么就gg,否则放在所有的非匹配点都可以
简单来说的话就是放在非匹配点,那么对手的下一步必定移到一个匹配点,然后自己可以把它移到这个匹配点所匹配的另一个点。这样的话先手总能比后手多走一步

//minamoto
#include<bits/stdc++.h>
#define R register
#define inf 0x3f3f3f3f
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
#define gg(u) for(int &i=cur[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
inline int min(R int x,R int y){return x<y?x:y;}
using namespace std;
const int N=1e4+5,M=1e5+5;
const int dx[]={1,0,-1,0},dy[]={0,-1,0,1};
struct eg{int v,nx,w;}e[M];int head[N],tot=1;
inline void add(R int u,R int v,R int w){e[++tot]={v,head[u],w},head[u]=tot;e[++tot]={u,head[v],0},head[v]=tot;
}
int q[N],cur[N],dep[N],vis[N],bl[N],ok[N],id[105][105],b[105][105];
int n,m,S,T,cnt;char s[105];bool flag=0;
bool bfs(){fp(i,S,T)cur[i]=head[i],dep[i]=-1;int h,t;q[h=t=1]=S,dep[S]=0;while(h<=t){int u=q[h++];go(u)if(dep[v]<0&&e[i].w){dep[v]=dep[u]+1,q[++t]=v;if(v==T)return true;}}return false;
}
int dfs(int u,int lim){if(u==T||!lim)return lim;int flow=0,f;gg(u)if(dep[v]==dep[u]+1&&(f=dfs(v,min(lim,e[i].w)))){flow+=f,lim-=f,e[i].w-=f,e[i^1].w+=f;if(!lim)break;}return flow;
}
inline int dinic(){int flow=0;while(bfs())flow+=dfs(S,inf);return flow;}
void Dfs(int u,int lim){if(vis[u])return;vis[u]=1;if(bl[u]==lim)ok[u]=1,flag=true;go(u)if(e[i].w==lim)Dfs(v,lim);
}
int main(){
//  freopen("testdata.in","r",stdin);scanf("%d%d",&n,&m),S=0,T=n*m+1;fp(i,1,n){scanf("%s",s+1);fp(j,1,m)id[i][j]=++cnt,b[i][j]=s[j]=='#';}fp(i,1,n)fp(j,1,m)if(!b[i][j]&&((i+j)&1))fp(k,0,3){int xx=i+dx[k],yy=j+dy[k];bl[id[i][j]]=1;if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&!b[xx][yy])add(id[i][j],id[xx][yy],1);}fp(i,1,n)fp(j,1,m)if(!b[i][j]&&((i+j)&1))add(S,id[i][j],1);else if(!b[i][j])add(id[i][j],T,1);dinic();Dfs(S,1),memset(vis,0,sizeof(vis)),Dfs(T,0);if(!flag)return puts("LOSE"),0;puts("WIN");fp(i,1,n)fp(j,1,m)if(ok[id[i][j]])printf("%d %d\n",i,j);return 0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10139102.html

P4055 [JSOI2009]游戏相关推荐

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

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

  2. BZOJ 1443: [JSOI2009]游戏Game

    1443: [JSOI2009]游戏Game Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1077  Solved: 484 [Submit][S ...

  3. 博弈论题表(好少~~~)

    bzoj2017:[Usaco2009 Nov]硬币游戏 *用了一小点思想的傻逼dp(记忆化搜索) bzoj1188:[HNOI2007]分裂游戏 **很神奇的把游戏拆分为子游戏的方法 bzoj102 ...

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

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

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

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

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

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

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

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

  8. 【bzoj1444】[Jsoi2009]有趣的游戏 AC自动机+矩阵乘法

    题目描述 输入 注意 是0<=P 输出 样例输入 样例输出 题解 AC自动机+矩阵乘法 先将所有字符串放到AC自动机中,求出Trie图. 然后构建邻接矩阵:如果x不是某个字符串的末位置,则x连向 ...

  9. BZOJ1444: [Jsoi2009]有趣的游戏(Trie图,矩乘)

    Description Input 注意 是0<=P, n , l, m≤ 10. Output Sample Input input 1 3 2 2 1 2 1 2 AB BA AA inpu ...

最新文章

  1. 教你如何一步步将项目部署到Github
  2. 某互联网企业技术发展史(四)配置nginx和mysql兼容Yii框架,上传网站并调试成功...
  3. 半导体制冷器性能计算
  4. 【网络安全】黑客是怎么利用私服游戏远控电脑的呢?
  5. Java线程6个状态详解
  6. 将excel文件中的数据导入到mysql
  7. 如何看待李开复演讲称早期帮旷视拿了蚂蚁金服大量人脸数据,以及李开复、蚂蚁和旷视的澄清?该如何保护隐私?...
  8. 缓冲区,粘包,解决粘包的方法,
  9. Hibernate中Criteria的完整用法
  10. 刚入行程序员,未来怎么走?
  11. Python 将输出内容保存在text文件中
  12. Graphviz样例之UML图
  13. linux uwf开放80端口,SELinux - osc_a3uwfsx7的个人空间 - OSCHINA - 中文开源技术交流社区...
  14. 第九届蓝桥杯JavaA组省赛真题
  15. JSP:JavaBean+EL函数+JSTL标签
  16. 正弦和余弦(角度到弧度)
  17. 计算机读不到移动硬盘怎么办,电脑读出来移动硬盘,但是显示不出来怎么办
  18. unity|火焰和烟效果(粒子系统)
  19. markdown快速入门之有道云笔记七牛图床与极简图床共舞
  20. 关于Matplotlib作图时中文字体无法显示问题

热门文章

  1. android 按钮列表,android – 如何使按钮看起来像列表
  2. cad怎么卸载干净_CAD无法卸载,又无法安装怎么办?
  3. CICD和K8S实战
  4. git学习-pull命令
  5. Git21天打卡day9-查看远程仓库分支git branch -a
  6. 使用这个插件,fiddler抓包直接生成httprunner脚本
  7. 如何成为高级测试人?
  8. 计算机屏幕调节亮度,电脑屏幕亮度怎么调最好 有没有调节电脑屏幕亮度的软件...
  9. 用MATLAB编程课程设计,matlab课程设计报告---用Mtlab编程实现句柄图形应用
  10. fprintf,input和disp函数