<题目链接>

题目大意:

给你一张图,图中有 '*' , '.' 两点,现在每次覆盖相邻的两个 '#' ,问最多能够覆盖几次。

解题分析:

无向图二分匹配的模板题,每个'#'点与周围四个方向的'#'建立匹配关系,然后用匈牙利跑一遍,因为匹配的两点各会进行相互匹配一次,所以最大匹配数为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 【最大匹配】的更多相关文章

  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. 4185 Oil Skimming 最大匹配 奇偶建图

    题目大意: 统计相邻(上下左右)的‘#’的对数. 解法: 与题目hdu1507 Uncle Tom's Inherited Land*类似,需要用奇偶建图.就是行+列为奇数的作为X集合,偶尔作为Y集合 ...

  4. HDU 4185 Oil Skimming

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

  5. HDU4185 Oil Skimming —— 最大匹配

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

  6. Oil Skimming HDU - 4185(匹配板题)

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

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

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

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

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

  9. J - Oil Skimming 二分图的最大匹配

    Description Thanks to a certain "green" resources company, there is a new profitable indus ...

随机推荐

  1. 阿里云-AliRepo

    <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name&g ...

  2. Windows 批处理大全(附各种实例)

    Windows 批处理大全(附各种实例) 2009年07月19日 21:31:00 阅读数:2552 批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命 ...

  3. Confluence 6 使用 Velocity 宏

    当编辑自定义 Decorator 模板文件的时候,有一些宏可被用来定义页面中复杂或者多变的内容,例如菜单,链接等.你可以插入这些宏到你的模板中.更多的信息,请参考Working With Decora ...

  4. Confluence 6 用户目录图例 - 和 Jira 连接到 Crowd

      上面的图:Confluence, JIRA 和其他应用程序连接到 Crowd 作为用户管理. https://www.cwiki.us/display/CONF6EN/User+Managemen ...

  5. bzoj 2427

    非常好的一道题,可以说是树形dp的一道基础题 首先不难发现,:如果我们把有关系的两个点用有向边相连,那么就会形成一个接近树的结构.如果这是一棵完美的树,我们就可以直接在树上打背包了 但是这并不是一棵完 ...

  6. Python字典(Dictionary)

    Python中字典与类表类似,也是可变序列,不过与列表不同,他是无序的可变序列,保存的内容是以键 - 值对的形式存放的.类似我们的新华字典,他可以把拼音和汉字关联起来,通过音节表可以快速的找到想要的字 ...

  7. JSON数据写入和解析

    如何写入JSON 需要第三方jar包,JSON包 //写入json数据 public static String sendJson() { JSONObject json = new JSONObje ...

  8. HDU 2112 HDU Today(最短路径+map)

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. 20165206 2017-2018-2 《Java程序设计》第二周学习总结

    20165205 2017-2018-2 <Java程序设计>第一周学习总结 教材学习内容总结 java语言共有8种基本数据类型,分别是boolean.byte.short.char.in ...

  10. Stuck on "Authenticating with iTunes Store"

    https://forums.developer.apple.com/thread/76803 Try this, it fixed it for me. Open Terminal and run: ...