HDU4185 Oil Skimming 二分图匹配 匈牙利算法
原文链接http://www.cnblogs.com/zhouzhendong/p/8231146.html
题目传送门 - HDU4185
题意概括
每次恰好覆盖相邻的两个#,不能重复,求最大覆盖次数。(引用大佬的http://blog.csdn.net/u011721440/article/details/38144339)
题解
我们对于每两个相邻#的建边(来回两条)。
然后我们把格子黑白染色一下,发现黑点只会向白点连边,白点只会连向黑点连边,于是这个就是二分图了。
然后跑一跑匈牙利。
答案要除以2,因为你建了来回边。
注意,本题的#很少,不超过600个。
代码
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;
const int N=1005;
int T,n,tn[N][N],g[N][N],cnt,match[N],vis[N];
char pl[N][N];
bool check(int x,int y){
return 1<=x&&x<=n&&1<=y&&y<=n&&tn[x][y];
}
bool Match(int x){
for (int i=1;i<=cnt;i++)
if (g[x][i]&&!vis[i]){
vis[i]=1;
if (match[i]==-1||Match(match[i])){
match[i]=x;
return 1;
}
}
return 0;
}
int hungary(){
int res=0;
memset(match,-1,sizeof match);
for (int i=1;i<=cnt;i++){
memset(vis,0,sizeof vis);
if (Match(i))
res++;
}
return res;
}
int main(){
scanf("%d",&T);
for (int Case=1;Case<=T;Case++){
scanf("%d",&n);
cnt=0;
memset(tn,0,sizeof tn);
for (int i=1;i<=n;i++){
scanf("%s",pl[i]+1);
for (int j=1;j<=n;j++)
if (pl[i][j]=='#')
tn[i][j]=++cnt;
}
memset(g,0,sizeof g);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++){
if (pl[i][j]!='#')
continue;
if (check(i,j-1))
g[tn[i][j]][tn[i][j-1]]=1;
if (check(i,j+1))
g[tn[i][j]][tn[i][j+1]]=1;
if (check(i-1,j))
g[tn[i][j]][tn[i-1][j]]=1;
if (check(i+1,j))
g[tn[i][j]][tn[i+1][j]]=1;
}
printf("Case %d: %d\n",Case,hungary()/2);
}
return 0;
}
HDU4185 Oil Skimming 二分图匹配 匈牙利算法的更多相关文章
- 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 ...
- Codevs 1222 信与信封问题 二分图匹配,匈牙利算法
题目: http://codevs.cn/problem/1222/ 1222 信与信封问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 ...
- (转)二分图匹配匈牙利算法与KM算法
匈牙利算法转自于: https://blog.csdn.net/dark_scope/article/details/8880547 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名 ...
- BZOJ1059 [ZJOI2007]矩阵游戏 二分图匹配 匈牙利算法
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1059 题意概括 有一个n*n(n<=200)的01矩阵,问你是否可以通过交换整行和整列使得左 ...
- 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...
- 矩阵游戏|ZJOI2007|BZOJ1059|codevs1433|luoguP1129|二分图匹配|匈牙利算法|Elena
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MB Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩 ...
- BZOJ 1191 [HNOI2006]超级英雄Hero:二分图匹配 匈牙利算法
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 题意: 有m道题,每答对一题才能接着回答下一个问题. 你一道题都不会,但是你有n个“ ...
- [bzoj]1059矩阵游戏<二分图匹配*匈牙利算法>
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1059 初见此题,我觉得这是水题,我认为只要每一行和每一列至少存在一个黑格就可以出现对角线, ...
随机推荐
- Linux多台主机间配置SSH免密登陆
1.安装ssh. sudo apt-get install ssh. 安装完成后会在~目录(当前用户主目录,即这里的/home/xuhui)下产生一个隐藏文件夹.ssh(ls -a 可以查看隐藏文件 ...
- MySQL NULL处理
-- 首先在用户表中插入数据如下 TRUNCATE TABLE UserInfo ; INSERT INTO `userinfo`(`ID`,`UserName`,`UserLogin`,`User ...
- swift 实践- 01 -- UItableView的简单使用
import UIKit class ViewController: UIViewController ,UITableViewDelegate,UITableViewDataSource{ over ...
- 在Amazon FreeRTOS V10中使用运行时统计信息
在MCU on Eclipse网站上看到Erich Styger在8月2日发的博文,一篇关于在Amazon FreeRTOS V10中使用运行时统计信息的文章,本人觉得很有启发,特将其翻译过来以备参考 ...
- python 面向对象编程(高级篇)
飞机票 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对 ...
- Confluence 6 修改 Home 目录的位置
当 Confluence 第一次启动的时候,Confluence 将会读取 confluence-init.properties 文件并从这个文件中确定如何去查找 Home 目录. 希望修改 home ...
- 【VBA】数组定义时,括号内的数值n为最大下标,其长度为n+1
定义数组 dim arr(9) as integer注意这是数组的长度为10,而9指的是最大下标值. 所以在redim和赋值的时候要特别小心,防止错位.
- selenium 获取input输入框中的值的方法
方法一:获取input的文本值 <input class="form-text-normal" id="txtName" name="Name& ...
- 对<tr><td>标签里的input 循环取值
需求描述:单击table整行,跳转到具体的信息页面 关键就是获取整行的id,传给后台做查询,返回list 解决思路:用带参数函数传过去id,然后在js的函数中用$("#id"). ...
- 部署描述符 web.xml
google的部署描述符详解: https://cloud.google.com/appengine/docs/flexible/java/configuring-the-web-xml-deploy ...