正题


大意

一个n*m的棋盘上有k个洞,将1*2的木条放在上面,不能铺在洞上,不能重叠,求能不能铺满整个棋盘。


解题思路

用点来建立二分图,然后求最大匹配。

但是奇偶建图会快两倍。奇偶建图就是相邻的块可以相连接,所以它们可以不放在同一边。


代码

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct line{int to,next;
}le[11001];
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
int tot,w,s,n,m,k,num[41][41],link[1101],xx,y,one,two,ls[1101];
bool cover[1101],a[41][41];
void add(int x,int y)
{le[++tot].next=ls[x];le[tot].to=y;ls[x]=tot;
}//邻接表
bool find(int x)//最大匹配
{int p;for (int q=ls[x];q;q=le[q].next){if (!cover[le[q].to]){cover[le[q].to]=true;p=link[le[q].to];link[le[q].to]=x;if (!p || find(p)) return true;link[le[q].to]=p;}}return false;
}
int main()
{scanf("%d%d%d",&m,&n,&k);w=k;for (int i=1;i<=k;i++){scanf("%d%d",&xx,&y);a[xx][y]=true;}if((n*m-k)&1) return puts("NO")&1;//特判节省时间for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)if (!a[i][j]){if ((i+j)%2==1) num[i][j]=++one;else num[i][j]=++two;//分为奇偶标号}for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){if (!a[i][j] && (i+j)%2==1)for (int k=0;k<4;k++){if (i+dx[k]>=1 && i+dx[k]<=n && j+dy[k]>=1 && j+dy[k]<=m)if (!a[i+dx[k]][j+dy[k]])add(num[i][j],num[i+dx[k]][j+dy[k]]);//建立连接}}  for (int i=1;i<=one;i++){memset(cover,0,sizeof(cover));if (find(i)) s++;}if (n*m==s*2+w) printf("YES");//计算答案else printf("NO");
}

POJ2446-Chessboard【最大匹配,二分图,奇偶建图】相关推荐

  1. 【HDU - 4185】Oil Skimming (二分图,建图,匈牙利算法)

    题干: Thanks to a certain "green" resources company, there is a new profitable industry of o ...

  2. 二分图最大匹配及常用建图方法

    算法---艺术 二分图匹配剖析 很多人说,算法是一种艺术.但是对于初学者的我,对算法认识不是很深刻,但偶尔也能感受到他强大的魅力与活力. 这让我追求算法的脚步不能停止.下面我通过分析匈牙利算法以及常用 ...

  3. 二分图常用建图方法及其性质

    建图方法 https://wenku.baidu.com/view/63c1a01655270722192ef7c3.html 性质 http://dsqiu.iteye.com/blog/16895 ...

  4. luogu P4258 [WC2016]挑战NPC(一般图的最大匹配,带花树,建图、拆点技巧)

    整理的算法模板合集: ACM模板 luogu P4258 [WC2016]挑战NPC 如果是一堆球一堆筐,每一个筐里只能放一个球,求最大能放多少个球, 那么就是一个二分图的最大匹配问题,非常简单,我们 ...

  5. POJ2446【建图建图】

    题意: 给你一个n*n的矩阵,然后再给你几个坑,然后问你能否被1*2的长方形给覆盖: -弱知道了是二分匹配的做法,但是弱还是不会转化,又是在建图上GG了 分析: 从国际象棋的那个黑白色理解,这是一张二 ...

  6. 【POJ - 2226】Muddy Fields(匈牙利算法 或 网络流dinic,二分图匹配,最小点覆盖,矩阵中优秀的建图方式 )

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

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

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

  8. 男生和女生(思维建图,最大独立集问题)

    男生和女生(思维建图,最大独立集问题) 问题描述 在大学二年级,一些人开始了同学之间罗曼蒂克关系的研究.有"罗曼蒂克"关系是针对男生和女生之间的关系而言的.研究的原因是找到满足以下 ...

  9. 解题报告:POJ 3281 Dining(最大流 / “三分图”建图)

    B.POJ 3281 DiningDiningDining(最大流/建图模板)[省选/NOI- ] 有 F 种食物和 D 种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一 种食物和一种饮料.现 ...

最新文章

  1. AI一分钟 | 传阿里百度京东6月回归A股;汽车合资股比限制将取消,特斯拉或成最大赢家...
  2. 剑与远征赏金试炼活动将在13天后结束,工会玩法大家有尝试过吗?
  3. chkconfig 系统服务管理
  4. fabric sdk php,Hyperledger Fabric PHP SDK
  5. 发那科2021参数_三菱发那科常用参数对照
  6. 开启防火墙并添加出入站规则
  7. Java基础学习总结(92)——Java编码规范之排版、注释及命名
  8. centOS6.6虚拟机启动后登陆界面无法显示
  9. JavaScript:模块化及模块化规范
  10. Windows中ElasticSearch的备份和还原
  11. 快逸报表常见问题整理-java报表
  12. 简单计算机面试题库及答案_计算机面试常问问题及答案
  13. 记java的那些编辑器的故事之凌嘉文+李晓彤-结对编程
  14. 光功率 博科交换机_交换机是否支持查看光模块型号及收发光功率
  15. mysql实战22 | MySQL有哪些“饮鸩止渴”提高性能的方法?
  16. 关于VMBox重启无法打开虚拟机问题
  17. 面向海洋观监测传感网的移动终端位置隐私保护研究
  18. SDA(静态数据认证)
  19. 见证国内人工智能与机器人技术的进步
  20. 乐优商城(05)--商品管理

热门文章

  1. linux服务器查配置信息失败,查看Linux服务器的配置信息
  2. quicktype游戏java程序_使用QuickType工具从json自动生成类型声明代码
  3. 机器学习之无监督学习——聚类
  4. 机器学习——常用算法的总结
  5. 算法题目——Problem A 二进制(北邮机试)
  6. python——学习笔记2
  7. windows和linux命令行一样吗,微软改进Windows命令行 目的是和Linux命令行相抗衡
  8. org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the
  9. [C++11]推荐使用auto的场景
  10. [Java基础]Properties