HDU 4185 Oil Skimming 【最大匹配】
<题目链接>
题目大意:
给你一张图,图中有 '*' , '.' 两点,现在每次覆盖相邻的两个 '#' ,问最多能够覆盖几次。
解题分析:
无向图二分匹配的模板题,每个'#'点与周围四个方向的'#'建立匹配关系,然后用匈牙利跑一遍,因为匹配的两点各会进行相互匹配一次,所以最大匹配数为ans/2。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N=+; //本题数据中'#'数量较少,开到600都能AC
char mpa[][];
int n,vN,vM;
int g[N][N],cnt[][],vis[N],match[N];
bool dfs(int x){
for(int i=;i<=vM;i++){
if(g[x][i]&&!vis[i]){
vis[i]=;
if(match[i]==-||dfs(match[i])){
match[i]=x;
return true;
}
}
}
return false;
}
int Hungary(){
int ans=;
memset(match,-,sizeof(match));
for(int i=;i<=vN;i++){
memset(vis,,sizeof(vis));
if(dfs(i))ans++;
}
return ans;
}
int main(){
int T;scanf("%d",&T);
int ncase=;
while(T--){
scanf("%d",&n);
int pos=;
for(int i=;i<=n;i++){
scanf("%s",mpa[i]+);
for(int j=;j<=n;j++)
if(mpa[i][j]=='#')cnt[i][j]=++pos; //给所有的'#'分配编号
}
memset(g,,sizeof(g));
//将该点与其周围四个方向的'#'都建立匹配关系
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(mpa[i][j]!='#')continue;
if(i->=&&mpa[i-][j]=='#')g[cnt[i][j]][cnt[i-][j]]=;
if(j->=&&mpa[i][j-]=='#')g[cnt[i][j]][cnt[i][j-]]=;
if(i+<=n&&mpa[i+][j]=='#')g[cnt[i][j]][cnt[i+][j]]=;
if(j+<=n&&mpa[i][j+]=='#')g[cnt[i][j]][cnt[i][j+]]=;
}
}
vN=vM=pos;
int ans=Hungary(); //求出最大匹配数
printf("Case %d: %d\n",++ncase,ans/); //因为匹配的两点会相互各进行一次匹配,所以这里要除以2
}
return ;
}
2018-11-14
HDU 4185 Oil Skimming 【最大匹配】的更多相关文章
- HDU 4185 ——Oil Skimming——————【最大匹配、方格的奇偶性建图】
Oil Skimming Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- hdu 4185 Oil Skimming(二分图匹配 经典建图+匈牙利模板)
Problem Description Thanks to a certain "green" resources company, there is a new profitab ...
- 4185 Oil Skimming 最大匹配 奇偶建图
题目大意: 统计相邻(上下左右)的‘#’的对数. 解法: 与题目hdu1507 Uncle Tom's Inherited Land*类似,需要用奇偶建图.就是行+列为奇数的作为X集合,偶尔作为Y集合 ...
- HDU 4185 Oil Skimming
题目大意:在一个N*N的矩阵里寻找最多有多少个“##”(横着竖着都行). 题目分析:重新构图,直接以相邻的两个油井算中间算以条边,然后进行匹配,看看两两之间最多能匹配多少对. #include ...
- HDU4185 Oil Skimming —— 最大匹配
题目链接:https://vjudge.net/problem/HDU-4185 Oil Skimming Time Limit: 2000/1000 MS (Java/Others) Memo ...
- Oil Skimming HDU - 4185(匹配板题)
Oil Skimming Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU4185:Oil Skimming(二分图最大匹配)
Oil Skimming Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- 匈牙利算法求最大匹配(HDU-4185 Oil Skimming)
如下图:要求最多可以凑成多少对对象 大佬博客: https://blog.csdn.net/cillyb/article/details/55511666 https://blog.csdn.net/ ...
- J - Oil Skimming 二分图的最大匹配
Description Thanks to a certain "green" resources company, there is a new profitable indus ...
随机推荐
- 在XIB 或者 SB 上面 实现 半透明的背景上添加UILabel是文字不透明
设透明背景的时候直接设置RGB值 然后设置Opacity即可
- Confluence 6 重构 ancestor 表
ancestor 表记录了上级和下级(子页面)页面之间的关系.这个表格同时被用来确定子页面是否具有从上级页面继承来的限制(restrictions)权限. 偶尔 ancestor 表格中的数据可能被损 ...
- 对Swoole、Workerman和php自带的socket的理解
为什么php自带的socket不怎么听说,基本都是用swoole,workerman去实现? 1.PHP的socket扩展是一套socket api,仅此而已. swoole,用C实现,它的socke ...
- NIO(二)
Mark和reset的使用 package com.cppdy.nio; import java.nio.ByteBuffer; //Mark和reset的使用 public class NIOBuf ...
- day11 函数的位置形参,位置实参,可变长位置形参,关键字形参
今天内容 函数的参数详解 形参与实参 形参及形式参数,就是在定义函数是括号中指定的参数(本质就是一个名字) 实参及实际参数,指的是在调用函数是传入的参数)(本质就是一个值) 在调用函数是就会把形参和实 ...
- 《剑指offer》从尾到头打印链表
本题来自<剑指offer> 从尾到头打印链表 题目: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 思路: 方案一:首先遍历到尾部,然后从尾部进行到头值进行操作,后进先 ...
- rsync注意事项
1.sudo rsync -zavP --exclude=/.git/ --exclude=.env --exclude=web/index.php --password-file=/usr/loc ...
- selenium 操作键盘
send_keys(Keys.ENTER) 按下回车键send_keys(Keys.TAB) 按下Tab制表键send_keys(Keys.SPACE) 按下空格键spacesend_keys(Kye ...
- IDEA的debug操作
- HTTP 599: SSL certificate problem: unable to get local issuer certificate错误
自己在用 PySpider 框架爬虫运行代码后时出现 HTTP 599: SSL certificate problem: unable to get local issuer certificate ...