二分匹配的灵活运用

3041还是比较好想的,考虑到横排/竖排射一枪就能搞定这一行/一列的所有点,

我们以行数为点集x,列数为点集y,在目标点(xi,yi)之间连一条边

这样最小射击次数=最小点覆盖(边两端点至少有一个点在覆盖集中)=最大匹配

poj2226是它的加强版

这里一块木板不能覆盖非泥泞点,也就是说一块木板不一定能搞定那一行所有的点

于是我们考虑到将连续的泥泞点标号,表示这些泥泞点是由哪个木板盖住(横竖分别标号)

这样,我们以横排木板为点集x,竖排木板为点集y,对于每个点,在盖住它的横竖排木板之间连边

(显然,每个点至多被一个横木板,一个竖木板覆盖)

于是根据poj3041,做匈牙利即可

 var a:array[..,..] of char;
    h1,h2:array[..,..] of longint;
    map:array[..,..] of boolean;
    cx,cy:array[..] of longint;
    v:array[..] of boolean;
    s1,s2,ans,i,j,n,m:longint; function find(x:longint):longint;   //增广路
  var i:longint;
  begin
    for i:= to s2 do
      if map[x,i] and not v[i] then
      begin
        v[i]:=true;
        if (cy[i]=-) or (find(cy[i])>) then
        begin
          cx[x]:=i;
          cy[i]:=x;
          exit();
        end;
      end;
    exit();
  end; begin
  readln(n,m);
  for i:= to n do
  begin
    for j:= to m do
    begin
      read(a[i,j]);
    end;
    readln;
  end;
  for i:= to n do         //横排标号
  begin
    j:=;
    while j<=m do
    begin
      if a[i,j]='*' then
      begin
        inc(s1);
        h1[i,j]:=s1;
        inc(j);
        while a[i,j]='*' do     
        begin
          h1[i,j]:=s1;
          inc(j);
        end;
      end
      else inc(j);
    end;
  end;
  for i:= to m do      //竖排标号
  begin
    j:=;
    while j<=n do
    begin
      if a[j,i]='*' then
      begin
        inc(s2);
        h2[j,i]:=s2;
        inc(j);
        while a[j,i]='*' do
        begin
          h2[j,i]:=s2;
          inc(j);
        end;
      end
      else inc(j);
    end;
  end;
  for i:= to n do
    for j:= to m do
      map[h1[i,j],h2[i,j]]:=true;    //连边
  fillchar(cx,sizeof(cx),);
  fillchar(cy,sizeof(cy),);
  for i:= to s1 do     //匈牙利
    if cx[i]=- then
    begin
      fillchar(v,sizeof(v),false);
      ans:=ans+find(i);
    end;
  writeln(ans);
end.

一定要注意问题建模的灵活运用;

poj3041,poj2226的更多相关文章

  1. POJ-1325 Machine Schedule,和3041有着异曲同工之妙,好题!

    Machine Schedule Time Limit: 1000MS   Memory Limit: 10000K       Description As we all know, machine ...

  2. ZOJ 1654 Place the Robots(最大匹配)

    Robert is a famous engineer. One day he was given a task by his boss. The background of the task was ...

  3. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

  4. MPlayer

    名称   mplayer − 电影播放器 mencoder − 电影编解码器 概要   mplayer [选项] [文件|URL|播放列表|−] mplayer [选项] 文件1 [指定选项] [文件 ...

  5. python 爬取腾讯微博并生成词云

    本文以延参法师的腾讯微博为例进行爬取并分析 ,话不多说 直接附上源代码.其中有比较详细的注释. 需要用到的包有 BeautifulSoup WordCloud jieba # coding:utf-8 ...

  6. 面经 cisco

    1. 优先级反转问题及解决方法 (1)什么是优先级反转 简单从字面上来说,就是低优先级的任务先于高优先级的任务执行了,优先级搞反了.那在什么情况下会生这种情况呢? 假设三个任务准备执行,A,B,C,优 ...

  7. linux驱动(续)

    网络通信 --> IO多路复用之select.poll.epoll详解 IO多路复用之select.poll.epoll详解      目前支持I/O多路复用的系统调用有 select,psel ...

  8. HttpServletRequest对象(一)

    javaweb学习总结(十)——HttpServletRequest对象(一) 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HT ...

  9. 【poj2226】 Muddy Fields

    http://poj.org/problem?id=2226 (题目链接) 题意 给出一个只包含‘.’和‘*’的矩阵,用任意长度的宽为1的木板覆盖所有的‘*’而不覆盖‘.’,木板必须跟矩形的长或宽平行 ...

随机推荐

  1. 代码规范-IAR设置

    1.在IAR内定义 char 2. 去掉相关的告警 3.LANGUAGE设置

  2. sp_depends 查询在sybase中依赖的函数

    sp_depends 查询在sybase中依赖的函数. sp_depends tblEK7_policy_exclude sp_depends tblEK7_agent_exclude

  3. 视网膜New iPad与普通分辨率iPad页面的兼容处理

    一.这是篇经验分享 就算不是果粉也应该知道,iPad2与new iPad的重大区别之一就是显示屏的分辨率.new iPad显示屏被称之为“视网膜显示屏”,其设备分辨比(之前有详细介绍,点击这里查看)是 ...

  4. Who needs an architect?---Martin Fowler

    英文及译文下载链接:http://pan.baidu.com/share/link?shareid=163291504&uk=1428554614 1.文章主题总结 首先我们从文章的几个小标题 ...

  5. C# - 高级方法参数

    可选参数 -必须有个默认值,默认值必须是字面值,常量值,新对象实例或者默认值类型值. public List<string> GetWords( string sentence, bool ...

  6. 让Flash背景透明兼容Firefox、IE 6和IE 7的代码

    添加代码: <param name="wmode" value="transparent" > 到 <object>…</obje ...

  7. XSS 攻击在它的面前都弱爆了!

    虽然双十一刚刚过去不久,但是对很多工程师来说,连续熬夜加班的「噩梦」似乎还没有过去.尤其是像双十一这种活动,对于电商网站的工程师们来说,他们需要彻夜的加班加点来保障网站的稳定性和安全性.当然,面对上千 ...

  8. 1961-计算机基础知识大赛 2 (new)

    描述 求A^B的最后三位数表示的整数(1<=A,B<=10000) 输入 A B 输出 A^B的最后三位数 样例输入 2 3 12 6 样例输出 8 984 #include<ios ...

  9. 阿里云,CentOS下yum安装mysql,jdk,tomcat

    首先说明,服务器是阿里云的,centos6.3_64位安全加固版.首先需要登陆进来,使用的是putty,因为最初的时候,Xshell登陆会被拒绝. 0. 创建个人文件夹 # 使用 yum 安装tomc ...

  10. URAL 1009 K-based numbers(DP递推)

    点我看题目 题意 : K进制的N位数,不能有前导零,这N位数不能有连续的两个0在里边,问满足上述条件的数有多少个. 思路 : ch[i]代表着K进制的 i 位数,不含两个连续的0的个数. 当第 i 位 ...