先对整幅图进行二分图染色,再跑一遍匈牙利算法。如果最大匹配数=点数*2,那么输出WIN。

对于任何一个非必须在最大匹配上的点,即为所求的点。

 Program Test375num2;
type arr=record
u,v,next:longint;
end;
const dx:array[..] of longint=(,,-,);
dy:array[..] of longint=(,-,,);
maxn=;
maxm=maxn*;
var map:array[..,..] of longint;
cl:array[..maxn] of longint;
eg:array[..maxm] of arr;
last:array[..maxn] of longint;
l,r,f:array[..maxn] of longint;
pd:array[..maxn] of boolean;
i,j,m,n,num,sum,x:longint;
ch:char;
procedure dfs(i,j,w:longint);
var k,x,y:longint;
begin
cl[map[i,j]]:=w;
for k:= to do
begin
x:=i+dx[k]; y:=j+dy[k];
if (map[x,y]>) and (cl[map[x,y]]=) then
dfs(x,y,-w);
end;
end;
procedure add(u,v:longint);
begin
inc(sum);
eg[sum].u:=u;
eg[sum].v:=v;
eg[sum].next:=last[u];
last[u]:=sum;
end;
procedure put(i,j:longint);
var k,x,y:longint;
begin
for k:= to do
begin
x:=i+dx[k]; y:=j+dy[k];
if (map[x,y]>) then add(map[i,j],map[x,y]);
end;
end;
function Hungarian(u:longint):boolean;
var i,v:longint;
begin
i:=last[u];
while i<> do
begin
v:=eg[i].v;
if not pd[v] then
begin
pd[v]:=true;
if (l[v]=) or Hungarian(l[v]) then
begin
r[u]:=v;
l[v]:=u;
exit(true);
end;
end;
i:=eg[i].next;
end;
exit(false);
end;
procedure dfsl(u:longint);
var i,v:longint;
begin
f[u]:=;
i:=last[u];
while i<> do
begin
v:=eg[i].v;
if f[v]= then
begin
f[v]:=;
if f[l[v]]= then dfsl(l[v]);
end;
i:=eg[i].next;
end;
end; procedure dfsr(u:longint);
var i,v:longint;
begin
f[u]:=;
i:=last[u];
while i<> do
begin
v:=eg[i].v;
if f[v]= then
begin
f[v]:=;
if f[r[v]]= then dfsr(r[v]);
end;
i:=eg[i].next;
end;
end;
begin
readln(m,n);
num:=; sum:=;
for i:= to m do
begin
for j:= to n do
begin
read(ch);
if ch='.' then
begin
map[i,j]:=(i-)*n+j;
inc(num);
end
else map[i,j]:=-;
end;
readln;
end;
for i:= to m do
for j:= to n do
if (map[i,j]>) and (cl[map[i,j]]=) then
dfs(i,j,);
for i:= to m do
for j:= to n do
if map[i,j]> then put(i,j); fillchar(l,sizeof(l),);
fillchar(r,sizeof(r),);
sum:=;
for i:= to m*n do
if cl[i]= then
begin
fillchar(pd,sizeof(pd),false);
if Hungarian(i) then inc(sum);
end;
if sum*=num then
begin
writeln('LOSE');
halt;
end;
writeln('WIN');
fillchar(f,sizeof(f),);
for i:= to m*n do
if (cl[i]>) and (f[i]=) and (l[i]=) and (r[i]=) then
if cl[i]= then dfsl(i) else dfsr(i);
for i:= to m do
for j:= to n do
begin
x:=(i-)*m+j;
if f[x]= then writeln(i,' ',j);
end;
end.

ps:好像没有LOSE的点 ←_ ←

BZOJ1443 游戏game (二分图染色+匈牙利算法)的更多相关文章

  1. CODEVS1022 覆盖 (二分图染色+匈牙利算法)

    先对整幅图进行二分图染色,再跑一遍匈牙利算法. /* CODEVS1022 */ #include <cstdio> #include <cstring> #include & ...

  2. HDU 5943 Kingdom of Obsession 【二分图匹配 匈牙利算法】 (2016年中国大学生程序设计竞赛(杭州))

    Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  3. USACO 4.2 The Perfect Stall(二分图匹配匈牙利算法)

    The Perfect StallHal Burch Farmer John completed his new barn just last week, complete with all the ...

  4. HDU 2444 - The Accomodation of Students - [二分图判断][匈牙利算法模板]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Mem ...

  5. 矩阵游戏|ZJOI2007|BZOJ1059|codevs1433|luoguP1129|二分图匹配|匈牙利算法|Elena

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MB Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩 ...

  6. BZOJ1059 [ZJOI2007]矩阵游戏 二分图匹配 匈牙利算法

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1059 题意概括 有一个n*n(n<=200)的01矩阵,问你是否可以通过交换整行和整列使得左 ...

  7. [bzoj]1059矩阵游戏<二分图匹配*匈牙利算法>

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1059 初见此题,我觉得这是水题,我认为只要每一行和每一列至少存在一个黑格就可以出现对角线, ...

  8. UESTC 919 SOUND OF DESTINY --二分图最大匹配+匈牙利算法

    二分图最大匹配的匈牙利算法模板题. 由题目易知,需求二分图的最大匹配数,采取匈牙利算法,并采用邻接表来存储边,用邻接矩阵会超时,因为邻接表复杂度O(nm),而邻接矩阵最坏情况下复杂度可达O(n^3). ...

  9. Codevs 1222 信与信封问题 二分图匹配,匈牙利算法

    题目: http://codevs.cn/problem/1222/ 1222 信与信封问题   时间限制: 1 s   空间限制: 128000 KB   题目等级 : 钻石 Diamond 题解 ...

随机推荐

  1. JSP-Runoob:JSP 国际化

    ylbtech-JSP-Runoob:JSP 国际化 1.返回顶部 1. JSP 国际化 在开始前,需要解释几个重要的概念: 国际化(i18n):表明一个页面根据访问者的语言或国家来呈现不同的翻译版本 ...

  2. PCB SQL SERVER 发送邮件(异步改同步)

    采用SQL SERVER发送邮件是队列方式(异步)发送邮件,所以在我们执行发送邮件后,无法立即获取到邮件是否发送成功了,而在PCB行业实际应用中是需要立即获取发送邮件是否成功的状态来决定下一步逻辑该如 ...

  3. 0619-dedeCMS的安装、重装、目录说明、基本操作及注意事项

    一.安装步骤: 1.解压文件,将我们需要的uploads文件夹更名为dedeCMS 2.从站点下打开dedeCMS-install-index.php开始安装 3.安装完成后到php.ini中设置re ...

  4. 湖南集训day8

    难度:☆☆☆☆☆☆☆ /* 可以先考虑一维,可知 模k意义下相同的前缀和任意两个相减都是k的倍数 问题等价于统计前缀何种模k相同的数的对数. 多维的时候二维前缀和,压行或者压列,n^3可以解决. */ ...

  5. linux 如何查看进程的执行时间

    ps  -ef|grep wo.php 得到 程序的pid 如 123 ps -p 123 -o etime

  6. Dex文件方法数超过65536怎么破?

    你的应用中的Dex 文件方法数超过了最大值65536的上限,会提示你: UNEXPECTED TOP-LEVEL EXCEPTION:java.lang.IllegalArgumentExceptio ...

  7. 【BZOJ2762】[JLOI2011]不等式组(树状数组)

    题目: BZOJ2762 分析: 加入的不等式分三种情况 当\(a>0\),可以变成\(x>\lfloor \frac{c-b}{a}\rfloor\) 当\(a=0\),若\(b> ...

  8. 题解报告:hdu 1162 Eddy's picture

    Problem Description Eddy begins to like painting pictures recently ,he is sure of himself to become ...

  9. [转]mysql索引详解

    转自:http://www.cnblogs.com/ggjucheng/archive/2012/11/04/2754128.html 什么是索引 索引用来快速地寻找那些具有特定值的记录,所有MySQ ...

  10. Java Controller下兼容xls和xlsx且可识别合并单元格的excel导入功能

    1.工具类,读取单元格数据的时候,如果当前单元格是合并单元格,会自动读取合并单元格的值 package com.shjh.core.util; import java.io.IOException; ...