题意:

M*N的棋盘,规定其中有K个格子不能放任何东西。(即不能被覆盖)

每一张牌的形状都是1*2,问这个棋盘能否被牌完全覆盖(K个格子除外)

思路:

M、N很小,把每一个可以覆盖的格子都离散成一个个点,然后二分图最大匹配。

一个重要的问题**:可不可能存在建完的图是这样的情况:1-2,2-3,3-4,4-5,5-1?这种情况二分图最大匹配是5,但实际上答案是不对的。

证明:不可能存在这样的由奇个点构成的环图。我们按这种方法来看看能不能构造出这样一个棋盘。

假设有2k+1个个格(奇数),则第k+1个格一定有一个位置。并且一定与第k个格和第k+2个格相邻。

假设第k个格与第k+2个格的横坐标之差是x,纵坐标之差是y。则有x+y=2。(画个图)

接下来添加第k-1个格和第k+3个格,然后添加第k-2个格和第k+4个格,......一直到添加完最后一对,即第1个格和第2k+1个格,然后结束。

每添加一对格时,可以发现新的x+y的值要么是上一次的x+y的值-2,要么是不变,要么是+2。

而真实的情况是添加到最后一对,即第1个格和第2k+1个格,这两个格子是相邻的,也就是最后一次的x+y=1。而这是不可能的。

故不存在那种图。故直接二分图最大匹配是正确的。

代码:

int n,m,k;
int board[35][35];
vector<int> graph[1500];
int cx[1500],cy[1500];
bool bmask[1500];
int cc; 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,cc) cx[i]=cy[i]=-1;
rep(i,1,cc) if(cx[i]==-1){
mem(bmask,false);
ans+=findPath(i);
}
return ans;
} int main(){
while(scanf("%d%d%d",&m,&n,&k)!=EOF){
mem(board,0);
rep(i,1,k){
int x,y;
scanf("%d%d",&y,&x);
board[x][y]=-1;
}
rep(i,1,m) rep(j,1,n){
if(board[i][j]==-1) continue;
board[i][j]=++cc;
}
rep(i,1,cc) graph[i].clear();
rep(k,0,3) rep(i,1,m) rep(j,1,n){
if(board[i][j]==-1) continue;
int ni=i+uu[k], nj=j+vv[k];
if(ni>0 && ni<=m && nj>0 && nj<=n && board[ni][nj]!=-1) graph[board[i][j]].push_back(board[ni][nj]);
}
int dd=MaxMatch();
if(dd==cc)
puts("YES");
else
puts("NO");
}
}

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 1469 COURSES 二分图最大匹配 二分图

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

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

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

  6. POJ 2446 Chessboard【二分图最大匹配】

    <题目链接> 题目大意: 给你一个n*m的棋盘,其中有k个洞,现在有1*2大小的纸片,纸片不能覆盖洞,并且每个格子最多只能被覆盖一次.问你除了洞口之外这个棋盘是否能被纸片填满. 解题分析: ...

  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. Java比较两个浮点数

    浮点数的基本数据类型不能用==比较,包装数据类型不能用 equals 比较 浮点数的表示 在计算机系统中,浮点数采用 符号+阶码+尾数 进行表示.在Java中,单精度浮点数float类型占32位,它的 ...

  2. Java定时任务Quartz

    第一步:pom文件中添加依赖包 第二步:创建xml文件,名称为:spring-scheduler 路径如下图: 第三步:spring-scheduler配置详情 <!--创建任务--> & ...

  3. Docker入门系列之二:Docker术语

    原文作者:Jeff Hale 原文地址:https://towardsdatascience.com/learn-enough-docker-to-be-useful-1c40ea269fa8 翻译: ...

  4. 进入vim /etc/profile如何退出

    按o或i输入 按Esc,输入:wq,退出

  5. linux 客户机挂载vitualbox共享文件夹

    1. 安装增强功能包(Guest Additions) 安装好Ubuntu 9.10后,运行Ubuntu并登录.然后在VirtualBox的菜单里选择"设备(Devices)" - ...

  6. P6122-[NEERC2016]Mole Tunnels【模拟费用流】

    正题 题目链接:https://www.luogu.com.cn/problem/P6122 题目大意 给出\(n\)个点的一棵满二叉树,每个点有容量\(c_i\),\(m\)次从\(p_i\)处加一 ...

  7. P5287-[HNOI2019]JOJO【KMP】

    正题 题目链接:https://www.luogu.com.cn/problem/P5287 题目大意 开始一个空串,\(n\)个操作 在末尾加入\(x\)个\(c\)字符(保证和\(c\)和前面的字 ...

  8. Python第3方模块安装

    前言: 我们在实际开发过程中,很多模块是Python没有自带的,所以我们使用模块前需要先安装第三方模块. 在线安装: 1.为了简便cmd指令操作,建议先打开Python目录下的Scripts文件夹下, ...

  9. serialVersionUID序列化版本号与ObjectOutputStream对象输入输出流

    1. 观察ObjectOutputStream 我们观察ObjectOutputStream就可以发现该类没有无参构造,只有有参构造,所以他是一个包装流 2. 具体使用: public static ...

  10. 单体应用 适合采用 dapr 构建吗?

    缘起今天在微信群里有同学问 "纯.net 项目,有必要上dapr吗?" 当时不假思索的说不是微服务没必要,其他群友也说没必要.下午细想了一下,觉得这个和微服务没有关系,如果我的应用 ...