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 题解 ...
随机推荐
- poj3463 Sightseeing——次短路计数
题目:http://poj.org/problem?id=3463 次短路计数问题,在更新最短路的同时分类成比最短路短.长于最短路而短于次短路.比次短路长三种情况讨论一下,更新次短路: 然而其实不必被 ...
- IJ:IJ笔记1
ylbtech-IJ:IJ笔记1 1. 下拉框返回顶部 1. <form:select id="type" path="baseId" class=&qu ...
- 新版chrome调整开发者工具位置方式改变
转自:https://blog.csdn.net/gsls200808/article/details/70244150 本文所指新版56.0.2924.87 (64-bit) 原来F12可以看到窗口 ...
- vue-router路由加载两种模式
路由安装npm install --save vue-router 安装完成后,打开package.json,如果看到这个"vue-router": 版本号, 就代表安装成功了 ...
- linux 防火墙关闭
systemctl status firewalld.servicesystemctl status iptables.service关闭防火墙,selinux15:54:43运维-李浩 2017/ ...
- HTML--使用单选框、复选框,让用户选择
在使用表单设计调查表时,为了减少用户的操作,使用选择框是一个好主意,html中有两种选择框,即单选框和复选框,两者的区别是单选框中的选项用户只能选择一项,而复选框中用户可以任意选择多项,甚至全选.请看 ...
- UNIX环境高级编程--2
UNIX标准及实现 ISO C: 国际标准化组织(International Organization for standardization , ISO)ISO C标准的意图是提供C程序的可移植性, ...
- Web页面使用VLC播放插件
一.原生态Demo下载 选择原因:我们为什么选择VLC播放插件?原因是它支持IE8浏览器播放视频,如果高版本的浏览器大可不必选择该插件,很多html5插件既好用又简单,但是有些交管或政府 部门还是限制 ...
- 【1】Jdk1.8中的HashMap实现原理
HashMap概述 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 内部实现 ...
- Android studio USB连接失败
Android studio USB连接失败,可能是因为adb的端口被占了,此时在其自带的cmd中输入netstat -aon|findstr "5037",并且启动任务管理器关掉 ...