题意:

M*N的矩阵,每个格不是*就是#。     *代表水坑,#代表草地。

农民要每次可以用一块宽为1,长不限的木板去铺这个矩阵。要求这块木板不能覆盖草地。木板可以重复覆盖(即一块木板与另一块木板有交叉重叠的部分)。

问农民最少需要操作多少次可以覆盖所有的水坑。

思路 :

与Battle Ships那题非常像,代码也几乎一样。

对于每一行,可以分成一段一段的水坑,将其视为一个一个点,作为左部X集合中的点。

对于每一列同理。

对于每一个水坑,将其看作一条线,将其在左部X集合中的位置和在右部Y集合中的位置连起来,代表这个水坑可以被那两块木板覆盖。

求二分图的最小点覆盖即可。(最小点覆盖:用最少的点【可以是左部的点,也可以是右部的点】,使得所有的边都至少有一个端点是被覆盖的)

代码:

int T,m,n;
char mapp[55][55];
char temp[55];
int row[55][55], col[55][55];
int cc1,cc2;
int cx[2505], cy[2505];
bool bmask[2505];
vector<int> graph[2505]; int findPath(int u){
int L=graph[u].size();
rep(i,0,L-1){
int v=graph[u][i];
if(!bmask[v]){
bmask[v]=true;
if(cy[v]==-1||findPath(cy[v])){
cy[v]=u;
cx[u]=v;
return 1;
}
}
}
return 0;
}
int MaxMatch(){
int ans=0;
rep(i,1,cc1) cx[i]=-1;
rep(i,1,cc2) cy[i]=-1;
rep(i,1,cc1) if(cx[i]==-1){
mem(bmask,false);
ans+=findPath(i);
}
return ans;
} int main(){
//freopen("test.in","r",stdin);
while(scanf("%d%d",&m,&n)!=EOF){
rep(i,0,m-1) scanf("%s",mapp[i]);
cc1=0, cc2=0;
mem(row,0); mem(col,0);
rep(i,0,m-1){
if(mapp[i][0]=='*') row[i][0]=++cc1;
rep(j,1,n-1) if(mapp[i][j]=='*'){
if(mapp[i][j-1]=='*') row[i][j]=cc1; else row[i][j]=++cc1;
}
} rep(j,0,n-1){
if(mapp[0][j]=='*') col[0][j]=++cc2;
rep(i,1,m-1) if(mapp[i][j]=='*'){
if(mapp[i-1][j]=='*') col[i][j]=cc2; else col[i][j]=++cc2;
}
}
rep(i,1,cc1) graph[i].clear();
rep(i,0,m-1) rep(j,0,n-1) if(mapp[i][j]=='*') graph[row[i][j]].push_back(col[i][j]); int dd=MaxMatch();
printf("%d\n",dd);
}
//fclose(stdin);
}

poj 2226 Muddy Fields(最小点覆盖)的更多相关文章

  1. POJ 2226 Muddy Fields (最小点覆盖集,对比POJ 3041)

    题意 给出的是N*M的矩阵,同样是有障碍的格子,要求每次只能消除一行或一列中连续的格子,最少消除多少次可以全部清除. 思路 相当于POJ 3041升级版,不同之处在于这次不能一列一行全部消掉,那些非障 ...

  2. POJ - 2226 Muddy Fields (最小顶点覆盖)

    *.*. .*** ***. ..*. 题意:有一个N*M的像素图,现在问最少能用几块1*k的木条覆盖所有的 * 点,k为>=1的任意值. 分析:和小行星那题很像.小行星那题是将一整行(列)看作 ...

  3. POJ 2226 Muddy Fields(最小顶点覆盖)

    POJ 2226 Muddy Fields 题目链接 题意:给定一个图,要求用纸片去覆盖'*'的位置.纸片能够重叠.可是不能放到'.'的位置,为最少须要几个纸片 思路:二分图匹配求最小点覆盖.和放车那 ...

  4. poj 2226 Muddy Fields (转化成二分图的最小覆盖)

    http://poj.org/problem?id=2226 Muddy Fields Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  5. poj 2226 Muddy Fields(最小覆盖点+构图)

    http://poj.org/problem?id=2226 Muddy Fields Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  6. [POJ] 2226 Muddy Fields(二分图最小点覆盖)

    题目地址:http://poj.org/problem?id=2226 二分图的题目关键在于建图.因为“*”的地方只有两种木板覆盖方式:水平或竖直,所以运用这种方式进行二分.首先按行排列,算出每个&q ...

  7. poj 2226 Muddy Fields(最小点覆盖+巧妙构图)

      Description Rain has pummeled the cows' field, a rectangular grid of R rows and C columns (1 <= ...

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

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

  9. POJ 2226 Muddy Fields (二分图匹配)

    [题目链接] http://poj.org/problem?id=2226 [题目大意] 给出一张图,上面有泥和草地,有泥的地方需要用1*k的木板覆盖, 有草地的地方不希望被覆盖,问在此条件下需要的最 ...

随机推荐

  1. Linux系列(5) - 目录处理命令(2)

    删除空目录: rmdir rmdir [目录名] 删除文件或目录: rm rm  -rf  [文件或目录] 选项 -r            删除目录 -f                   强制 ...

  2. jmeter 录制排除模式

    jmeter录制时,静态的资源不需要,可以在录制的时候直接排除. .*\.(bmp|css|js|gif|icov|jpeg|png|swf|woff|woff2|htm|html).* .*\.(j ...

  3. javascript 责任链模式 Chain of Responsibility

    * 可拆分的责任链节点 // 可拆分的责任链节点 // Chain.prototype.setNextSuccessor 指定在链条中的下一个节点 // Chain.prototype.passReq ...

  4. javascript 享元模式 flyweight

    * 适应条件 ** 一个程序中使用了大量的相似对象 造成大的内存开销 ** 对象的大多数状态都可以变为外部状态 ** 剥离出对象的外部状态之后, 可以使用相对较少的共享对象取代大量对象 * 上传文件的 ...

  5. python学习笔记(八)-模块

    大型python程序以模块和包的形式组织.python标准库中包含大量的模块.一个python文件就是一个模块.1.标准模块 python自带的,不需要你安装的2.第三方模块 需要安装,别人提供的. ...

  6. centos实现免密登陆及远程操作

    ----------------------------**********------------------------------------------------- 免密码登陆 第一步: 执 ...

  7. yum 安装 php 环境

    如此简单 第一步: sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7. ...

  8. 不关闭selinux下配置php+httpd访问KingbaseES

    在不关闭selinux的情况下使httpd+php+KingbaseES正常使用1.正常设置php.apache 除了正常流程外还需要在/etc/sysconfig/httpd最后追加LD_LIBRA ...

  9. 华为云计算IE面试笔记-Fusionsphere架构及组件介绍(服务器虚拟化解决方案)

    eDSK   最上层则是eDSK是我们FusionSphere服务器虚拟化解决方案中的虚拟化北向统一API接口,其他的第三方系统或者是其他运营平台(FC.VMware等)可以通过eDSK轻松完成无缝对 ...

  10. spring Data Jpa的依赖+配置

    spring data jpa 是spring基于的orm框架,jpa规范的基础上封装的一套JPA应用框架 添加的相关依赖: <properties> <spring.version ...