题目链接:http://poj.org/problem?id=2226

这道题跟上一道很相似不同之处在于这里不是整行或者整列的删,而是连续的几个可以一起删,不连的不能删,这就要对原图进行处理,对原有的图行由上到下,列由左到右进行编号,作为x集合,在同一行且连续的编号一样,然后对原有的图列由左到右,行由上到下重新编号,作为y集合。之后就是二分图求最大匹配。

View Code

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 const int MAX=55;
 6 int visit[20*MAX];
 7 int map[MAX][MAX];
 8 int res[20*MAX][20*MAX];
 9 int use[20*MAX];
10 int n,m,xx,yy;
11 int solve(int x)
12 {
13     int i;
14     for(i=1;i<=yy;i++)
15         if(res[x][i]&&!visit[i])
16         {
17             visit[i]=1;
18             if(use[i]==-1||solve(use[i]))
19             {
20                 use[i]=x;
21                 return 1;
22             }
23         }
24         return 0;
25 }
26 int match()
27 {
28     int i,count=0;
29     for(i=1;i<=xx;i++)
30     {
31         memset(visit,0,sizeof(visit));
32         if(solve(i))count++;
33     }
34     return count;
35 }
36 void build()
37 {
38     int i,j,k;
39     k=0;
40     for(i=1;i<=n;i++)
41         for(j=1;j<=m;)
42             if(map[i][j]){
43                 k++;
44                 while(j<=m&&map[i][j])
45                     map[i][j++]=k;
46             }
47             else j++;
48             xx=k;
49             k=0;
50             for(j=1;j<=m;j++)
51                 for(i=1;i<=n;)
52                     if(map[i][j]){
53                         k++;
54                         while(i<=n&&map[i][j])
55                         {
56                             res[map[i][j]][k]=1;
57                             i++;
58                         }
59                     }
60                     else i++;
61                     yy=k;
62 }
63 int main()
64 {
65     int i,j;
66     char ch;
67     while(scanf("%d%d",&n,&m)!=EOF)
68     {
69         memset(map,0,sizeof(map));
70         memset(res,0,sizeof(res));
71         memset(use,-1,sizeof(use));
72         for(i=1;i<=n;i++)
73             for(j=1;j<=m;j++)
74             {
75                 //scanf("%c",&ch);
76                 cin>>ch;
77                 if(ch=='*')
78                 {
79                     map[i][j]=1;
80                 }
81             }
82             build();
83             printf("%d\n",match());
84     }
85     return 0;
86 }

转载于:https://www.cnblogs.com/zhaoguanqin/archive/2012/05/07/2488853.html

poj 2226 Muddy Fields 最小顶点覆盖相关推荐

  1. POJ 2226 Muddy Fields 最小点覆盖+加建图(好题)

    题目链接 题目一看就是最小点覆盖,这道题与POJ - 3041 算是一类题,但是3041算是一道十分裸的,因为删除的是整行或者整列,所以图其实是现成的,但是本题的难点就在如何建图. 思路:首先还是尽量 ...

  2. POJ - 2226 Muddy Fields(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个n*m的地图,地图中'*'代表泥地,'.'代表空地,现在我们有两种木板,一种可以覆盖一行中的任意长度,我们成为行木板,另一种可以覆盖一列中的任意长度,我们成为列木 ...

  3. poj 2226 Muddy Fields(合理建图+二分匹配)

    1 /* 2 题意:用木板盖住泥泞的地方,不能盖住草.木板任意长!可以重叠覆盖! '*'表示泥泞的地方,'.'表示草! 3 思路: 4 首先让我们回忆一下HDU 2119 Matrix这一道题,一个矩 ...

  4. POJ 2226 Muddy Fields(最小点覆盖)题解

    题意:一片r*c的地,有些地方是泥地,需要铺地板.这些地板宽1,长无限,但只能铺在泥地上不能压到其他地方,问你铺满所有泥地最少几块 思路:我们把一行中连续的泥地看成整体,并把所有横的整体里的点编成一个 ...

  5. poj 1325 Machine Schedule 最小顶点覆盖

    题意 两个机器A,B, 分别有 N,M个工作模式, K个作业,可以在( Ai, Bj ) 模式下工作. 机器最初在模式0下. 问最小的 切换模式次数. 解题思路 A, B 两个天然二分图顶点集合,   ...

  6. POJ-2226 Muddy Fields 最小点集覆盖

    题目链接:http://poj.org/problem?id=2226 这题是POJ 3041的升级版本,很有意思,要求木板不能盖在草地上.那么这里我们可以把每行一连续'*'的看做行,把每列连续的'* ...

  7. 【最小点覆盖】POJ 2226:Muddy Fields

    一.题目内容 POJ 2226 原题地址 二.题意解释 告诉你一个矩阵,让你用1 * x (x 为任意值) 的木板去铺符号* 可以覆盖 问最少多少木板能够把所有的*覆盖掉 三.代码及注释 #inclu ...

  8. poj Muddy Fields

    Muddy Fields 原题去我创的专题里找.在文件夹首页. 题目: 给出N*M矩阵.当中*表示泥土,.表示小草.要你用最少的木板把泥土覆盖. 木板长度不限,可是仅仅能水平和竖直. 行列式二分匹配配 ...

  9. POJ 2226 二分图最小点覆盖

    题意 传送门 POJ 2226 题解 每个泥泞地需要被至少一块横着或竖着的板子覆盖,那么预处理出不能覆盖草地的限制下,所有尽可能长的横板子与竖板子.对可覆盖同一块泥泞地的 222 块板子连边,则转化为 ...

最新文章

  1. 体质测试java代码_求java代码,要求做一个测试类,实现以下功能之一。最好三个功能都有。...
  2. linux su、su -和sudo的区别
  3. 第一个程序实现登录功能,密码输错三次封账号。
  4. Netlink 介绍(译)
  5. RabbitMQ快速入门--简单队列模型
  6. 海南首例供港造血干细胞志愿者启程赴广东捐献
  7. Scheduled SQL: SLS 大规模日志上的全局分析与调度
  8. java 自定义map_自定义写实现java中map中的功能(简易)
  9. 解决sklearn.metrics指标报错ValueError: Target is multiclass but average=‘binary‘. Please choose anothe...
  10. NAT负载均衡_ftp
  11. random number in groovy
  12. Tomcat9版本不支持jsp处理PUT,DELETE之外的请求的解决方案(405方法不允许)
  13. Linux网络基础番外篇(IP、MAC、TCP)
  14. 用c语言编程图书管理系统,C语言图书管理系统简洁版
  15. 【读书】卡勒德·胡赛尼《群山回唱》 摘录
  16. 使用HTML编写浣溪沙,浣溪沙_巅峰Hacker_新浪博客
  17. 【论文翻译】Mastering the game of Go without human knowledge (无师自通---在不借助人类知识的情况下学会围棋)
  18. react 页面跳转(下一页,返回上一页)
  19. 【已解决】MAC OS上teamviewer商业用途中断连接
  20. java设计模式(13-19节)

热门文章

  1. 注意!这些行为将会影响征信
  2. 现金贷平台倒闭后,借的钱是否可以不还?
  3. 年化利息100%,现金贷监管寒冬将至
  4. 创建 vxlan 并部署 instance - 每天5分钟玩转 OpenStack(147)
  5. 意大利终于付出了代价
  6. oracle 同义词_【干货7】Oracle知识关键代码摘要
  7. UFLDL教程:Exercise:Convolution and Pooling
  8. 使用Jest进行单元测试
  9. 不用去验血,对照这张表,就能知道自己缺啥!千万收藏好!
  10. CodeForces 1131G. Most Dangerous Shark