POJ 2446 Chessboard【二分图最大匹配】
<题目链接>
题目大意:
给你一个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【二分图最大匹配】的更多相关文章
- POJ 2446 Chessboard (二分图最大匹配)
题目链接:http://poj.org/problem?id=2446 给你一个n*m的棋盘,其中有k个洞,现在有1*2大小的纸片,纸片不能覆盖洞,并且每个格子最多只能被覆盖一次.问你除了洞口之外这个 ...
- POJ 2446 Chessboard (二分图匹配)
题意 在一个N*M的矩形里,用1*2的骨牌去覆盖该矩形,每个骨牌只能覆盖相邻的两个格子,问是否能把每个格子都盖住.PS:有K个孔不用覆盖. 思路 容易发现,棋盘上坐标和为奇数的点只会和坐标和为偶数的点 ...
- poj 2446 Chessboard (二分图利用奇偶性匹配)
Chessboard Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13176 Accepted: 4118 Descr ...
- POJ 2446 Chessboard(二分图最大匹配)
题意: M*N的棋盘,规定其中有K个格子不能放任何东西.(即不能被覆盖) 每一张牌的形状都是1*2,问这个棋盘能否被牌完全覆盖(K个格子除外) 思路: M.N很小,把每一个可以覆盖的格子都离散成一个个 ...
- POJ 1469 COURSES 二分图最大匹配 二分图
http://poj.org/problem?id=1469 这道题我绝壁写过但是以前没有mark过二分图最大匹配的代码mark一下. 匈牙利 O(mn) #include<cstdio> ...
- 【网络流#6】POJ 3041 Asteroids 二分图最大匹配 - 《挑战程序设计竞赛》例题
学习网络流中ing...作为初学者练习是不可少的~~~构图方法因为书上很详细了,所以就简单说一说 把光束作为图的顶点,小行星当做连接顶点的边,建图,由于 最小顶点覆盖 等于 二分图最大匹配 ,因此求二 ...
- poj - 3041 Asteroids (二分图最大匹配+匈牙利算法)
http://poj.org/problem?id=3041 在n*n的网格中有K颗小行星,小行星i的位置是(Ri,Ci),现在有一个强有力的武器能够用一发光速将一整行或一整列的小行星轰为灰烬,想要利 ...
- poj 2446 Chessboard (二分匹配)
Chessboard Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12800 Accepted: 4000 Descr ...
- Poj(1469),二分图最大匹配
题目链接:http://poj.org/problem?id=1469 COURSES Time Limit: 1000MS Memory Limit: 10000K Total Submissi ...
随机推荐
- CSS之清除浮动(span/clearfix)
一.问题描述 web网页设计中,在div元素中有时候常伴有图文结合的post组件.为了使得文本在图像周围环绕,那么需要对图像区域使用float浮动.如果不做清除浮动,则会出现如下结果: 图像比文本高, ...
- Java添加过期注解
加上 @Deprecated 后方法名称显示: 中划线(删除线)意为:发生这些变化并不会影响编译,只是提醒一下程序员,这个方法以后是要被删除的,最好别用.就是如果一个类从另外一个类继承,并且overr ...
- Prometheus 监控 Nginx 流量 (三)
介绍 基于Openresty和Prometheus.Consul.Grafana设计的,实现了针对域名和Endpoint级别的流量统计,使用Consul做服务发现.KV存储,Grafana做性能图展示 ...
- python - class类(归一化设计)
归一化设计 #继承同时具有两种含义 # 1.继承基类的方法,并且做出自己的改变或者扩展 # 2.声明某个子类兼容于某个基类,定义一个接口类,子类继承接口类,并且实现接口中定义的方法. # 实践中,继承 ...
- WPF工具开发: 第三库选择
PropertyGrid Winforms's PropertyGrid 非WPF原生支持, 需要借助WinFormHost 风格不可定制 PropertyInspectorView 算是" ...
- Linux内存管理--物理内存分配【转】
转自:http://blog.csdn.net/myarrow/article/details/8682819 1. First Fit分配器 First Fit分配器是最基本的内存分配器,它使用bi ...
- [转]VS2015 Git 源码管理工具简单入门
VS2015 Git 源码管理工具简单入门 1.VS Git插件 1.1 环境 VS2015+GitLab 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本 ...
- spring boot 中的热部署
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>sprin ...
- Python-HTML CSS题目
一.简答1.手写html模板,并解释模板每个标签的作用 <!doctype html> 文件类型html <html>页面根 <head>后勤内容 <meta ...
- CF1081A
CF1081A 题意: 从