<题目链接>

题目大意:

给你一个n*m的棋盘,其中有k个洞,现在有1*2大小的纸片,纸片不能覆盖洞,并且每个格子最多只能被覆盖一次。问你除了洞口之外这个棋盘是否能被纸片填满。

解题分析:

还有一种根据横、纵坐标之和奇偶性,将棋盘上所有的点分成二部图两部分,然后用匈牙利算法求解的方法。

#include <cstdio>
#include <cstring>
#define N 34
#define M N*N

], used[M], mat[M];
int match, m, n;

bool find(int k){
    ; i<=g[k][]; i++)        //遍历序号为k的点的所有能够和它匹配的点
    {
        int j = g[k][i];
        if(!used[j])
        {
            used[j] = ;
            if(!mat[j] || find(mat[j]))        //如果这个点没有归属点或者它的归属点能够和其它点进行匹配
            {
                mat[j] = k;         //那么更换这个点的归属点
                return true;
            }
        }
    }
    return false;
}

void Hungary()
{
    ; i<=m*n; i++)      //枚举每个点
    {
        ] != - && g[i][] != )      //如果这个点不是hole 并且 它有点可供它配对
        {
            memset(used, , sizeof(used));
            match += find(i);        //如果配对成功,+1
        }
    }
}

int main()
{
    int i, j;
    int k;
    int x, y;
    scanf("%d%d%d", &m, &n, &k);

    ; i<=k; i++)
    {
        scanf("%d%d", &y, &x);        //注意这个题目的输入有坑
        g[y+(x-)*n][] = -;
    }

    ; i<=m*n; i++)  //由于卡片长度为2,所以每个点只能和它周围相邻的点配对,所以先把所有点的所有能和它配对的点全部找出来
    {
        ] != -)
        {
            //left

            )%n >=  && g[i-][] != -)    //它左边有点且该点能够匹配
                g[i-][++g[i-][]] = i;           //那么就记录下这两个点的匹配关系
            //right

             && g[i+][] != -)
                g[i+][++g[i+][]] = i;
            //up

             && g[i-n][] != -)
                g[i-n][++g[i-n][]] = i;
            //down

            ) / n <= m && g[i+n][] != -)
                g[i+n][++g[i+n][]] = i;
        }
    }
    match = ;
    Hungary();        //匈牙利

    if(match == m*n-k)
        printf("YES\n");
    else
        printf("NO\n");

    ;
}

2018-08-15

POJ 2446 Chessboard【二分图最大匹配】的更多相关文章

  1. POJ 2446 Chessboard (二分图最大匹配)

    题目链接:http://poj.org/problem?id=2446 给你一个n*m的棋盘,其中有k个洞,现在有1*2大小的纸片,纸片不能覆盖洞,并且每个格子最多只能被覆盖一次.问你除了洞口之外这个 ...

  2. POJ 2446 Chessboard (二分图匹配)

    题意 在一个N*M的矩形里,用1*2的骨牌去覆盖该矩形,每个骨牌只能覆盖相邻的两个格子,问是否能把每个格子都盖住.PS:有K个孔不用覆盖. 思路 容易发现,棋盘上坐标和为奇数的点只会和坐标和为偶数的点 ...

  3. poj 2446 Chessboard (二分图利用奇偶性匹配)

    Chessboard Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13176   Accepted: 4118 Descr ...

  4. POJ 2446 Chessboard(二分图最大匹配)

    题意: M*N的棋盘,规定其中有K个格子不能放任何东西.(即不能被覆盖) 每一张牌的形状都是1*2,问这个棋盘能否被牌完全覆盖(K个格子除外) 思路: M.N很小,把每一个可以覆盖的格子都离散成一个个 ...

  5. POJ 1469 COURSES 二分图最大匹配 二分图

    http://poj.org/problem?id=1469 这道题我绝壁写过但是以前没有mark过二分图最大匹配的代码mark一下. 匈牙利 O(mn) #include<cstdio> ...

  6. 【网络流#6】POJ 3041 Asteroids 二分图最大匹配 - 《挑战程序设计竞赛》例题

    学习网络流中ing...作为初学者练习是不可少的~~~构图方法因为书上很详细了,所以就简单说一说 把光束作为图的顶点,小行星当做连接顶点的边,建图,由于 最小顶点覆盖 等于 二分图最大匹配 ,因此求二 ...

  7. poj - 3041 Asteroids (二分图最大匹配+匈牙利算法)

    http://poj.org/problem?id=3041 在n*n的网格中有K颗小行星,小行星i的位置是(Ri,Ci),现在有一个强有力的武器能够用一发光速将一整行或一整列的小行星轰为灰烬,想要利 ...

  8. poj 2446 Chessboard (二分匹配)

    Chessboard Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12800   Accepted: 4000 Descr ...

  9. Poj(1469),二分图最大匹配

    题目链接:http://poj.org/problem?id=1469 COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

随机推荐

  1. Linux下搭建gtk+2.0开发环境

    安装gtk2.0 sudo apt-get install libgtk2.0-dev 查看 2.x 版本 pkg-config --modversion gtk+-2.0 #有可能需要sudo ap ...

  2. Python(十) Python 中的 *args 和 **kwargs

    转载:团子的小窝 http://kodango.com/variable-arguments-in-python

  3. mysql 查询优化案例汇总

    一 简介:此文章为经历过的sql案例集合和相关思路 二 案例1: 现象: 测试环境出现select语句,join2张表多次join,explain结果如下 出现 using where,using j ...

  4. Database学习 - mysql 数据库 多表/复合/子 查询

    多表查询 多表查询,基本规则,通过两表有关联字段的进行条件匹配查询 内连接查询 方式一: SELECT 查看字段名[,查看字段名] FROM 一表名,二表名 WHERE 一/二表.字段 = 一/二表. ...

  5. pandas 定位 loc,iloc,ix

    In [114]: df Out[114]: A B C D 2018-06-30 0.318501 0.613145 0.485612 0.918663 2018-07-31 0.614796 0. ...

  6. 【Mysql sql inject】【入门篇】sqli-labs使用 part 4【18-20】

    这几关的注入点产生位置大多在HTTP头位置处 常见的HTTP注入点产生位置为[Referer].[X-Forwarded-For].[Cookie].[X-Real-IP].[Accept-Langu ...

  7. Libevent源码分析系列

    1.使用libevent库     源码那么多,该怎么分析从哪分析呢?一个好的方法就是先用起来,会用了,然后去看底层相应的源码,这样比较有条理,自上向下掌握.下面用libevent库写个程序,每隔1秒 ...

  8. 分布式系列 - dubbo服务telnet命令【转】

    dubbo服务发布之后,我们可以利用telnet命令进行调试.管理.Dubbo2.0.5以上版本服务提供端口支持telnet命令,下面我以通过实例抛砖引玉一下: 1.连接服务 测试对应IP和端口下的d ...

  9. Bootstrap3.0学习第二轮(栅格系统原理)

    详情请查看 http://aehyok.com/Blog/Detail/8.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...

  10. git免密配置

    1.在git安装目录下双击bash.exeC:\DevTools\Git\bin 2.在弹出窗口内输入,回车,回车ssh-keygen -t rsa -C "542113457@qq.com ...