题目

Description

如何放木板保证只覆盖到 ’*’ 而没有覆盖到 ’.’

Solution

(我太废了竟然想这题想了一个小时)考虑当前需要被覆盖的点 (x,y),假设有一块横着铺的木板 i ,一块竖着铺的木板 j,这两块木板同时经过了 (x,y),那么我们以横着铺的木板为左部点,竖着铺的木板为右部点,将这两个木板之间连一条边。问题就转化为了求二分图上的最小点覆盖。(因为每个要覆盖的点是一条边,要让每个点都被覆盖,等价于最小点覆盖)。

Code

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;

];
];
];
][];
int m,n,cnt,tot1,tot2,ans;
][],yy[][];

struct Edge{
    int to,nxt;
}edge[];

void add(int x,int y){
    edge[++cnt].to=y;
    edge[cnt].nxt=head[x];
    head[x]=cnt;
}

bool dfs(int now){
    ;
    vis[now]=;
    for(int i=head[now];i;i=edge[i].nxt){
        int to=edge[i].to;
        if(!pre[to]||dfs(pre[to])){
            pre[to]=now;
            ;
        }
    }
    ;
}

signed main(){
    scanf("%d%d",&m,&n);
    ;i<=m;i++){
        ;j<=n;j++){
            char ch;cin>>ch;
            ;
            ;
        }
    }
    ;i<=m;i++){
        ;j<=n;j++){
            if(!mp[i][j]) continue;
            ][j]) xx[i][j]=xx[i-][j];
            else xx[i][j]=++tot1;
            ]) yy[i][j]=yy[i][j-];
            else yy[i][j]=++tot2;
        }
    }
    ;i<=m;i++){
        ;j<=n;j++){
            if(!mp[i][j]) continue;
            add(xx[i][j],yy[i][j]);
        }
    }
    ;i<=tot1;i++){
        memset(vis,,sizeof vis);
        if(dfs(i)) ans++;
    }
    printf("%d",ans);
    ;
}

[POJ 2226] Muddy Fields的更多相关文章

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

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

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

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

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

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

  4. poj 2226 Muddy Fields (二分匹配)

    Muddy Fields Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7340   Accepted: 2715 Desc ...

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

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

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

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

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

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

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

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

  9. poj 2226 Muddy Fields(水二分图)

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

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

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

随机推荐

  1. 内置函数--bin() oct() int() hex()

    英文文档: bin(x) Convert an integer number to a binary string. The result is a valid Python expression. ...

  2. csrf

    什么是CSRF: CSRF(Cross-site request forgery),中文名称:跨站请求伪造 攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发 ...

  3. Ubuntu 11.04 NFS 配置

    安装 NFS 相关组件 sudo apt-get install nfs-kernel-server 增加 NFS 目录 sudo gedit /etc/exports #在文件中添加如下内容 /va ...

  4. Flex中的FusionCharts 四图监听

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  5. List转换成JSON对象报错(三)

    List转换成JSON对象 1.具体错误如下 Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/e ...

  6. JSP中的编译指令和动作指令的区别

    JSP中的编译指令和动作指令的区别 1.编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的脚本动作 2.编译指令是在将JSP编译成Servlet时起作用,而动作指令可替换成JSP脚本, ...

  7. Linux显示USB设备

    Linux显示USB设备 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ lsusb -tv /: Bus 08.Port 1: Dev 1, Class=ro ...

  8. Linux显示PCI设备

    Linux显示PCI设备 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ lspci -tv -[0000:00]-+-00.0 Advanced Micro ...

  9. vue轮播组件及去掉路由#

    最近公司要我去实现vue知识的系统讲解,总结一番,大致需要7节课,今天大致说一下我们使用vue需要学会的基本技能.vue是一个渐进性视图渲染框架,使用vue核心是数据出发,数据一般是我们前台从后台获取 ...

  10. 关于swiper的滚动条滑动

    <div class="swiper-container2"> <div class="swiper-wrapper"> <div ...