题意:
       给你一个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 6000typedef 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 不错的最小顶点覆盖相关推荐

  1. poj2226(最小顶点覆盖)

    (相当于是poj3041的进阶版,不过难度还好) 题目大概意思为将一个矩阵中的泥泞部分给覆盖起来,可以横着覆盖也可以竖着覆盖,但不能覆盖到其他草地部分,覆盖的板子长度随意,宽度为1,可以重复覆盖,求最 ...

  2. 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)

    在讲述这两个算法之前,首先有几个概念需要明白: 二分图:  二分图又称二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边( ...

  3. [poj3041]Asteroids(二分图的最小顶点覆盖)

    题目大意:$N*N$的网格中有$n$颗行星,若每次可以消去一整行或一整列,求最小的攻击次数使得消去所有行星. 解题关键:将光束当做顶点,行星当做连接光束的边建图,题目转化为求该图的最小顶点覆盖,图的最 ...

  4. POJ3041 最小顶点覆盖

    题意:       给你一个n * n 的矩阵,和X所在的坐标,问你最少放多少个**可以把图里的所有X都覆盖,每个**可以覆盖一行,或者一列. 思路:       最小顶点覆盖,最小顶点覆盖=二分匹配 ...

  5. hdu 1054(最小顶点覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 思路:最小顶点覆盖 == 最大匹配(双向图)/2...不过一开始是用邻接矩阵,傻傻的TLE... ...

  6. hdu 1498(二分图最小顶点覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1498 解题思路: 这题看上去很和二分图的最小顶点覆盖很相似,但关键怎么处理多个不同颜色的气球. 其实就 ...

  7. HDU1054+最小顶点覆盖

    View Code /* 最小顶点覆盖:选出最少的点,这些点的关联的边都被覆盖 最小顶点覆盖等于最大匹配*/ #include<stdio.h> #include<stdlib.h& ...

  8. 【每日算法】【图论】【最小边覆盖 最小路径覆盖 最小顶点覆盖 最大独立集 最大团】

    最小边覆盖 = 最大独立集 = |V| - 最大匹配数 这个是在原图是二分图上进行的 最小路径覆盖和最小边覆盖不同,不要求给的图是二分图,而是要求是N x N的有向图,不能有环,然后根据原图构造二分图 ...

  9. hdu1054(最小顶点覆盖)

    传送门:Strategic Game 题意:用尽量少的顶点来覆盖所有的边. 分析:最小顶点覆盖裸题,最小顶点覆盖=最大匹配数(双向图)/2. #include <cstdio> #incl ...

最新文章

  1. html产品列表页的设计,产品列表页.html
  2. SpringCloud实战5-Feign声明式服务调用
  3. After Effects 2019 CC for mac下载安装激活步骤演示
  4. Pyhton为什么这么厉害?无意中从一道奥数题发现Python真的爽翻了
  5. 过年战胜熊孩子骚扰的终极攻略,拿走不谢!
  6. HDU2091 空心三角形【打印图案】
  7. 硕博士学位论文参考文献Endnote格式分享
  8. 这8行代码的惊艳与反思
  9. Windows Server 2016-Win Ser 2016已删减内容
  10. 加权voronoi图 matlab,加权voronoi图matlab
  11. excel表格两个表格合并
  12. NYNU_ACM 实验室招新月赛题解
  13. windows 10 arm架构ISO下载
  14. OpenCV笔记:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 与 绘制矩形 cv2.rectangle() 方法介绍
  15. 计算机电路板 接地,pcb电路板接地怎么接
  16. bzoj-1031 字符加密Cipher
  17. mysql数据库1067错误解决方法
  18. Python——习题:生成银行卡号和密码
  19. Windows API编程(一)最基础的知识介绍:Windows编程基础
  20. Ecology Letters:生物多样性的多维性、尺度依赖性及稀疏曲线的深度认知

热门文章

  1. Window2008R2安装Telnet客户端
  2. LVS集群-DR负载均衡集群
  3. PL/SQL程序设计 第一章 PL/SQL 程序设计简介
  4. DevExpress右键菜单使用 zt
  5. 连分数中一个有意思的小玩意儿
  6. 【VM单机模拟系列】VMware P2V简单实现
  7. [Ubuntu] SVN常用的批量操作
  8. 安装Synchronization service (Project Server 2007) 时出现 MSMQ 错误的解决
  9. C++线程同步之临界区
  10. Postgres数据库备份与还原命令