POJ2226 不错的最小顶点覆盖
题意:
给你一个n * m 的矩阵,上面有" * " 和 " . " ,让你用少的木板吧所有" * "覆盖,木板宽度是1,长度随意,木板可以重叠,但是不能覆盖到" . "上。
思路:
这个题目建图方式不错,回想下最基本的最小定点覆盖,也是在n * m 的矩阵上,覆盖某些点,但是可以覆盖" . "那样直接匹配行列就行了,这个如果是***.***就得用两个了,那我们可以直接把所有的行都离散化出来,吧所有的列都离散化出来,比如
*.*. 按照行离散成 1.2. 按照列离散成 1 . 4 .
.*** .333 . 3 4 5
***. 444. 2 3 4 .
..*. ..5. . . 4 .
接下来就直接正常行列匹配就行了("*"所在的行和列匹配)。
#include<stdio.h>
#include<string.h>
#define N_node 3000
#define N_edge 6000
typedef struct
{
int to ,next;
}STAR;
typedef struct
{
int r ,l;
}NODE;
STAR E[N_edge];
NODE map[60][60];
int mk_dfs[N_node] ,mk_gx[N_node];
int list[N_node] ,tot;
int mp[60][60];
void add(int a ,int b)
{
E[++tot].to = b;
E[tot].next = list[a];
list[a] = tot;
}
int DFS_XYL(int x)
{
for(int k = list[x] ;k ;k = E[k].next)
{
int to = E[k].to;
if(mk_dfs[to]) continue;
mk_dfs[to] = 1;
if(mk_gx[to] == -1 || DFS_XYL(mk_gx[to]))
{
mk_gx[to] = x;
return 1;
}
}
return 0;
}
int main ()
{
int n ,m ,i ,j ,maxr;
char str[60];
while(~scanf("%d %d" ,&n ,&m))
{
memset(mp ,0 ,sizeof(mp));
for(i = 1 ;i <= n ;i ++)
{
scanf("%s" ,str);
for(j = 1 ;j <= m ;j ++)
mp[i][j] = str[j-1] == '*';
}
int now = 0;
memset(map ,0 ,sizeof(map));
for(i = 1 ;i <= n ;i ++)
for(j = 1 ;j <= m ;j ++)
{
if(!mp[i][j])
{
map[i][j].r = 0;
continue;
}
if(mp[i][j] && !mp[i][j-1])
map[i][j].r = ++now;
else map[i][j].r = map[i][j-1].r;
}
maxr = now;
now = 0;
for(j = 1 ;j <= m ;j ++)
for(i = 1 ;i <= n ;i ++)
{
if(!mp[i][j])
{
map[i][j].l = 0;
continue;
}
if(mp[i][j] && !mp[i-1][j])
map[i][j].l = ++now;
else map[i][j].l = map[i-1][j].l;
}
memset(list ,0 ,sizeof(list));
tot = 1;
for(i = 1 ;i <= n ;i ++)
for(j = 1 ;j <= m ;j ++)
if(map[i][j].r && map[i][j].l)
add(map[i][j].r ,map[i][j].l);
int sum = 0;
memset(mk_gx ,255 ,sizeof(mk_gx));
for(i = 1 ;i <= maxr ;i ++)
{
memset(mk_dfs ,0 ,sizeof(mk_dfs));
sum += DFS_XYL(i);
}
printf("%d\n" ,sum);
}
return 0;
}
POJ2226 不错的最小顶点覆盖的更多相关文章
- POJ2226 Muddy Fields 二分匹配 最小顶点覆盖 好题
在一个n*m的草地上,.代表草地,*代表水,现在要用宽度为1,长度不限的木板盖住水, 木板可以重叠,但是所有的草地都不能被木板覆盖. 问至少需要的木板数. 这类题的建图方法: 把矩阵作为一个二分图,以 ...
- POJ2226(最小顶点覆盖)
Muddy Fields Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10044 Accepted: 3743 Des ...
- BZOJ 3140 消毒(最小顶点覆盖)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3140 题意:最近在生物实验室工作的小T遇到了大麻烦. 由于实验室最近升级的缘故,他的分格 ...
- poj 3041 Asteroids (最大匹配最小顶点覆盖——匈牙利模板题)
http://poj.org/problem?id=3041 Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions ...
- hdoj 1150 Machine Schedule【匈牙利算法+最小顶点覆盖】
Machine Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU ACM 1054 Strategic Game 二分图最小顶点覆盖?树形DP
分析:这里使用树形DP做. 1.最小顶点覆盖做法:最小顶点覆盖 == 最大匹配(双向图)/2. 2.树形DP: dp[i][0]表示i为根节点,而且该节点不放,所需的最少的点数. dp[i][1]表示 ...
- hdu1054(最小顶点覆盖)
传送门:Strategic Game 题意:用尽量少的顶点来覆盖所有的边. 分析:最小顶点覆盖裸题,最小顶点覆盖=最大匹配数(双向图)/2. #include <cstdio> #incl ...
- hdu 1150 Machine Schedule(最小顶点覆盖)
pid=1150">Machine Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/327 ...
- poj2594最小顶点覆盖+传递闭包
传递闭包最开始是在Floyd-Warshall算法里面出现的,当时这算法用的很少就被我忽视了.. 传递闭包是指如果i能到达k,并且k能到达j,那么i就能到达j Have you ever read a ...
随机推荐
- Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解
封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...
- Servlet原理解析&使用指南
Servlet(Server Applet)全称Java Servlet,是用Java编写的服务器端程序.广义上指任何实现了Server接口的类,主要功能在于交互式地浏览和生成数据,生成动态Web内容 ...
- classLoader动态加载技术
//加载器,apkPath为包含dex文件的.apk或jar路径,dexPath是优化后的dex文件路径,第三个表示libraryPath表示Native库的路径,最后是父类加载器 DexClassL ...
- 京东数科面试真题:常见的 IO 模型有哪些?Java 中的 BIO、NIO、AIO 有啥区别?
本文节选自<Java面试进阶指北 打造个人的技术竞争力> 面试中经常喜欢问的一个问题,因为通过这个问题,面试官可以顺便了解一下你的操作系统的水平. IO 模型这块确实挺难理解的,需要太多计 ...
- 批量SSH key-gen无密码登陆认证脚本 附件脚本
# 批量实现SSH无密码登陆认证脚本 ## 问题背景 使用为了让linux之间使用ssh不需要密码,可以采用了数字签名RSA或者DSA来完成.主要使用ssh-key-gen实现. 1.通过 ssh-k ...
- 发送请求时携带了参数,但是浏览器network没有显示的排错思路
发送请求时携带了参数,但是浏览器network没有显示的排错思路 不知道大家有没有遇到这样子的情况就是发送请求的时候明明携带了参数,但是浏览器的network中就是没有!请看下图和代码! 我发送请求用 ...
- [Fundamental of Power Electronics]-PART I-6.变换器电路-6.4 变换器评估与设计/6.5 重点与小结
6.4 变换器评估与设计 没有完美适用于所有可能应用场合的统一变换器.对于给定的应用和规格,应该进行折中设计来选择变换器的拓扑.应该考虑几种符合规格的拓扑,对于每种拓扑方法,对比较重要的量进行计算,比 ...
- [Fundamental of Power Electronics]-PART II-7. 交流等效电路建模-7.3 脉冲宽度调制器建模
7.3 脉冲宽度调制器建模 我们现在已经达成了本章开始的目标,为图7.1推导了一个有效的等效电路模型.但仍存在一个细节,对脉冲宽度调制(PWM)环节进行建模.如图7.1所示的脉冲宽度调制器可以产生一个 ...
- 记一次在virtualbox中安装windows7遇到增强功能安装分辨率的问题
在windows7中遇到很多次安装好增强功能后并不能对其实现放大分辨率,使其跟随虚拟机界面大小而改变. 经过许多次的安装和恢复快照,发现了在设置中,显存的大小一直都是处于边缘的状态, 关闭虚拟机后,我 ...
- 配置动态刷新RefreshScope注解使用局限性(一)
在 Spring Cloud 体系的项目中,配置中心主要用于提供分布式的配置管理,其中有一个重要的注解:@RefreshScope,如果代码中需要动态刷新配置,在需要的类上加上该注解就行.本文分享一下 ...