BZOJ1443 游戏game (二分图染色+匈牙利算法)
先对整幅图进行二分图染色,再跑一遍匈牙利算法。如果最大匹配数=点数*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 (二分图染色+匈牙利算法)的更多相关文章
- CODEVS1022 覆盖 (二分图染色+匈牙利算法)
先对整幅图进行二分图染色,再跑一遍匈牙利算法. /* CODEVS1022 */ #include <cstdio> #include <cstring> #include & ...
- HDU 5943 Kingdom of Obsession 【二分图匹配 匈牙利算法】 (2016年中国大学生程序设计竞赛(杭州))
Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- USACO 4.2 The Perfect Stall(二分图匹配匈牙利算法)
The Perfect StallHal Burch Farmer John completed his new barn just last week, complete with all the ...
- HDU 2444 - The Accomodation of Students - [二分图判断][匈牙利算法模板]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Time Limit: 5000/1000 MS (Java/Others) Mem ...
- 矩阵游戏|ZJOI2007|BZOJ1059|codevs1433|luoguP1129|二分图匹配|匈牙利算法|Elena
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MB Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩 ...
- BZOJ1059 [ZJOI2007]矩阵游戏 二分图匹配 匈牙利算法
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1059 题意概括 有一个n*n(n<=200)的01矩阵,问你是否可以通过交换整行和整列使得左 ...
- [bzoj]1059矩阵游戏<二分图匹配*匈牙利算法>
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1059 初见此题,我觉得这是水题,我认为只要每一行和每一列至少存在一个黑格就可以出现对角线, ...
- UESTC 919 SOUND OF DESTINY --二分图最大匹配+匈牙利算法
二分图最大匹配的匈牙利算法模板题. 由题目易知,需求二分图的最大匹配数,采取匈牙利算法,并采用邻接表来存储边,用邻接矩阵会超时,因为邻接表复杂度O(nm),而邻接矩阵最坏情况下复杂度可达O(n^3). ...
- Codevs 1222 信与信封问题 二分图匹配,匈牙利算法
题目: http://codevs.cn/problem/1222/ 1222 信与信封问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 ...
随机推荐
- 【XSY3209】RGB Sequence
题目 传送门 解法 用\(f_{i, j, k}\)表示有\(i\)个红石块, \(j\)个绿宝石块, \(k\)个钻石块 可以转移到\(f_{p+1, j, k}\). \(f_{i, p+1,k ...
- [Swift通天遁地]八、媒体与动画-(4)给相机添加CoreImage滤镜效果
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Activity启动模式(GIF 动态演示)
本文首发在我的个人微信公众号:Android开发圈 引言 关于Activity的启动模式是面试高频问题,在平时开发中,作用也不小,所以还是很有必要搞懂这一块的知识.其实之前也有写过这个主题的文章,但是 ...
- Hadoop Hive概念学习系列之hive里的优化和高级功能(十四)
在一些特定的业务场景下,使用hive默认的配置对数据进行分析,虽然默认的配置能够实现业务需求,但是分析效率可能会很低. Hive有针对性地对不同的查询进行了优化.在Hive里可以通过修改配置的方式进行 ...
- 程序员的幽默-献给所有Java程序员
1. 一程序员去面试,面试官问:“你毕业才两年,这三年工作经验是怎么来的?!”程序员答:“加班.” 2. 某程序员对书法十分感兴趣,退休后决定在这方面有所建树.于是花重金购买了上等的文房四宝.一日,饭 ...
- csf 课件转化为wmv正常格式
1. 下载csf文件到本地:如下图 2.从下面百度网盘下载到本地: https://pan.baidu.com/s/1BBbgq n85a 3.安装并出现下面图标,点击打开 4. 运行如下图 5. ...
- 【PostgreSQL-9.6.3】触发器概述(普通触发器)
一个触发器声明了当执行一种特定类型的操作时数据库应该自动执行一个特殊的函数.触发器可以被附加到表.视图和外部表.触发器经常用于做完整性约束,或者某种业务规则的约束. 1. 触发器的创建语法如下: CR ...
- 网站Gzip压缩
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:启用网站GZI ...
- Apache、Nginx与Tomcat的区别
一. 定义: 1. Apache Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上.其属于应用服务器.Apache支持支持模块多,性能稳定,A ...
- PHP 之ftp客户端类封装实现
<?php /** * Class FtpClient */ class FtpClient { private $host = '';//远程服务器地址 private $user = ''; ...