题目大意:

  统计相邻(上下左右)的‘#’的对数。

解法:

  与题目hdu1507 Uncle Tom's Inherited Land*类似,需要用奇偶建图。就是行+列为奇数的作为X集合,偶尔作为Y集合,都是‘#’就连边。最后求最大匹配。

  数据有点大,直接建图会出错(我试过)。可以按照‘#’出现的顺序给顶点编号。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int N=36005,INF=0x3f3f3f3f;
int cx[N],cy[N],dx[N],dy[N];
bool bmask[N];
vector<int > bmap[N];
int nx,ny,dis,ans;
bool searchpath()
{
queue<int> q;
dis=INF;
memset(dx,-1,sizeof(dx));
memset(dy,-1,sizeof(dy));
for(int i=1;i<=nx;i++)
{
if(cx[i]==-1){ q.push(i); dx[i]=0; }
while(!q.empty())
{
int u=q.front(); q.pop();
if(dx[u]>dis) break;
for(int i=0;i<bmap[u].size();i++)
{
int v=bmap[u][i];
if(dy[v]==-1)
{
dy[v]= dx[u] + 1;
if(cy[v]==-1) dis=dy[v];
else
{
dx[cy[v]]= dy[v]+1;
q.push(cy[v]);
}
}
}
}
}
return dis!=INF;
}
int findpath(int u)
{
for(int i=0;i<bmap[u].size();i++)
{
int v=bmap[u][i];
if(!bmask[v]&&dy[v]==dx[u]+1)
{
bmask[v]=1;
if(cy[v]!=-1&&dy[v]==dis) continue;
if(cy[v]==-1||findpath(cy[v]))
{
cy[v]=u; cx[u]=v;
return 1;
}
}
}
return 0;
}
void maxmatch()
{
ans=0;
memset(cx,-1,sizeof(cx));
memset(cy,-1,sizeof(cy));
while(searchpath())
{
memset(bmask,0,sizeof(bmask));
for(int i=1;i<=nx;i++)
if(cx[i]==-1) ans+=findpath(i);
}
}
void init()
{
for(int i=0;i<=N;i++) bmap[i].clear();
}
char s[605][605];
int Map[605][605];
int main()
{
//freopen("test.txt","r",stdin);
int cas,n,i,j,k=1,a,b,t=1;
char ch;
scanf("%d",&cas);
while(cas--)
{
scanf("%d",&n);
t=0;
for(i=1;i<=n;i++){
getchar();
for(j=1;j<=n;j++)
{
scanf("%c",&s[i][j]);
if(s[i][j]=='#') Map[i][j]=++t;
}
}
init();
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(s[i][j]=='#'&&((i+j)%2))
{
a=Map[i][j];
if(i>1&&s[i-1][j]=='#'){
b=Map[i-1][j];
bmap[a].push_back(b);
}
if(i<n&&s[i+1][j]=='#'){
b=Map[i+1][j];
bmap[a].push_back(b);
}
if(j>1&&s[i][j-1]=='#'){
b=Map[i][j-1];
bmap[a].push_back(b);
}
if(j<n&&s[i][j+1]=='#'){
b=Map[i][j+1];
bmap[a].push_back(b);
}
}
}
}
nx=t;
maxmatch();
printf("Case %d: %d\n",k++,ans);
}
return 0;
}

4185 Oil Skimming 最大匹配 奇偶建图的更多相关文章

  1. HDU 4185 ——Oil Skimming——————【最大匹配、方格的奇偶性建图】

    Oil Skimming Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...

  2. hdu 4185 Oil Skimming(二分图匹配 经典建图+匈牙利模板)

    Problem Description Thanks to a certain "green" resources company, there is a new profitab ...

  3. HDU4185 Oil Skimming —— 最大匹配

    题目链接:https://vjudge.net/problem/HDU-4185 Oil Skimming Time Limit: 2000/1000 MS (Java/Others)    Memo ...

  4. HDU 4185 Oil Skimming 【最大匹配】

    <题目链接> 题目大意: 给你一张图,图中有 '*' , '.' 两点,现在每次覆盖相邻的两个 '#' ,问最多能够覆盖几次. 解题分析: 无向图二分匹配的模板题,每个'#'点与周围四个方 ...

  5. LightOJ--1152--Hiding Gold(二分图奇偶建图)(好题)

    Hiding Gold Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Submit Sta ...

  6. HDU 4185 Oil Skimming

    题目大意:在一个N*N的矩阵里寻找最多有多少个“##”(横着竖着都行).     题目分析:重新构图,直接以相邻的两个油井算中间算以条边,然后进行匹配,看看两两之间最多能匹配多少对. #include ...

  7. (匹配 二维建图) Antenna Placement --POJ --3020

    链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#probl ...

  8. HDU4185:Oil Skimming(二分图最大匹配)

    Oil Skimming Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  9. 匈牙利算法求最大匹配(HDU-4185 Oil Skimming)

    如下图:要求最多可以凑成多少对对象 大佬博客: https://blog.csdn.net/cillyb/article/details/55511666 https://blog.csdn.net/ ...

随机推荐

  1. Android LinearLayout整个布局设置不可点击

    1,activity的xml布局(布局中有个Button按钮,点击按钮弹出一个popupwindow ) <?xml version="1.0" encoding=" ...

  2. Scala语言学习笔记——方法、函数及异常

    1.Scala 方法及函数区别 ① Scala 有方法与函数,二者在语义上的区别很小.Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量.换句话来说在类中定义的函数即是方法 ② Scal ...

  3. 金蝶WAFII

  4. Linux思维导图之rpm、yum、编译

    yum安装失败: 1.yum client 路径指向不正确:2.yum server 缓存未清理(yum clean all;yum makecache):3.网络不连通

  5. SSH(远程登录)

    在linux中SSH服务对应两个配置文件: ssh特点:在传输数据的时候,对文件加密后传输. ssh作用:为远程登录会话和其他网络服务提供安全性协议. ssh小结: 1.SSH是安全的加密协议,用于远 ...

  6. 1、springboot+mybatis+zookeeper+dubbox+maven+pagehelper

    一.创建普通的maven的web项目 2.配置KD42WF_Part1下的pom.xml <?xml version="1.0" encoding="UTF-8&q ...

  7. SBC37x交叉编译平台QT+OPENCV【2】虚拟机Vbox下Ubuntu的磁盘扩容

    虚拟机Vbox下Ubuntu,当初为了学习,仅仅分配了8g,结果qt,opencv等一上,就说room空间不够了.于是开始折腾磁盘扩容. 网上一大堆,也不知道有多少是自己动手走过,正是不但浪费别人时间 ...

  8. 念念不忘SERVLET

    这个弄弄也有意思,以前无法入门,没有系统性概念,现在慢慢开始懂了.. 这个SERVLET/JSP学习笔记也易懂.. 那个JAVA7程序设计也可以慢慢看来,, 再加上SPRING,我黑心了??:) pa ...

  9. Element UI Form 每行显示多列,即多个 el-form-item

    Element UI Form组件使用问题. 每个 el-form-item 都会独占一行. 对于输入项很多的管理app, 能否在每个form中, 每行显示 2 个或者多个 el-form-item ...

  10. hdoj--3072--Intelligence System(scc+缩点+数据去重)

    Intelligence System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...