/*因为要用1*2的纸片覆盖,那么两个值(i+j)必然一个奇数一个偶数,然后分别给图中的奇数偶数点依次从1开始标号,相邻的按其标号建图,匈牙利、、比较快速,正解!
因为必然是一个奇数点对应一个相邻偶数点,那么只要求任意奇数或偶数的最大匹配就可以了。经典的建图方法。
*/
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
#define maxm 4050
int n,m,s,tmp,temp;
int map[maxm][maxm],vis[maxm],link[maxm];//map存图
int dfs(int t)
{
for(int i=1;i<temp;i++)//i<temp
{
if(vis[i]==0&&map[t][i])
{
vis[i]=1;
if(link[i]==-1||dfs(link[i]))
{
link[i]=t;
return 1;
}
}
}
return 0;
}
int MaxMatch()
{
int num=0;
memset(link,-1,sizeof(link));
for(int i=1;i<tmp;i++)//i<tmp
{
memset(vis,0,sizeof(vis));
if(dfs(i))
num++;
}
return num;
}
int main()
{
int a,b,mmap[40][40];
while(cin>>n>>m>>s)
{
memset(map,0,sizeof(map));
memset(mmap,0,sizeof(mmap));
tmp=1;temp=1;
for(int i=0; i<s; i++)
{
cin>>a>>b;
mmap[b][a]=-1;///
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(mmap[i][j]!=-1){
if((i+j)&1) mmap[i][j]=temp++;
else mmap[i][j]=tmp++;
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(mmap[i][j]!=-1&&((i+j)&1)){
if(mmap[i-1][j]>0) map[mmap[i-1][j]][mmap[i][j]]=1;
if(mmap[i+1][j]>0) map[mmap[i+1][j]][mmap[i][j]]=1;
if(mmap[i][j-1]>0) map[mmap[i][j-1]][mmap[i][j]]=1;
if(mmap[i][j+1]>0) map[mmap[i][j+1]][mmap[i][j]]=1;
}
}
cout<<((n*m-s==2*MaxMatch())?"YES":"NO")<<endl;
}
return 0;
}
相关推荐
RagFlow实战:如何用DeepDoc引擎高效处理扫描PDF文档(附完整代码解析)
本文详细解析了如何利用RagFlow的DeepDoc引擎高效处理扫描PDF文档。通过实战演示从环境搭建、PDF预处理、文本检测与识别,到布局分析与表格结构提取的完整流程,并提供了完整的代码实现。该方案超越了传统OCR,能输出保留原始版面信息的结构化数据,为构建高质量知识库提供了强大支持。
关于二分图中网格图的建图问题——奇偶建图和拆点
首先所谓的网格图就是这样一张图,图源自POJ - 3020 网格图是天然的二分图,仔细思考这样一张图,i和j分别是网格图的坐标,对于每一个网个都对应一个i+j的值,对这样一个值而言,如果网格是奇数,那么他的上下左右相邻的四个格子必定是偶数(要么加一,要么减一),反之则反,如此在网格图中的匹配问题,我们通常可以采用奇偶建图的方式建图并进行解题。其中奇数和偶数点分别为x部和y部. 当然,我们...
别再傻傻分不清了!一文搞懂电机里的‘旋变’和‘编码器’到底有啥区别
本文深度解析电机位置传感器中旋转变压器(旋变)与编码器的核心区别,包括工作原理、精度对比及环境适应性。通过实测数据和典型应用场景,帮助工程师在工业机器人、新能源汽车电机等关键领域做出精准选型决策,提升系统可靠性和控制精度。
洛谷P2774 :方格取数问题( 网络流24题 奇偶建图+最小割)
https://www.luogu.org/problemnew/show/P2774 题目描述 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数。现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大。试设计一个满足要求的取数算法。对于给定的方格棋盘,按照取数要求编程找出总和最大的数。 输入输出格式 输入格式: 第 1 行有 2 个正整数 m 和 n,...
计算机视觉安防监控升级:人脸识别与行为异常检测
计算机视觉安防监控升级:人脸识别与行为异常检测 ,人工智能,计算机视觉,大模型,AI,本文将深入探讨人脸识别与行为异常检测技术在安防监控中的应用,包括技术原理、算法实现、应用场景以及面临的挑战与解决方案。通过实际案例和代码示例,帮助读者更好地理解和掌握这些技术,为推动安防监控系统的智能化升级提供参考。
S7-1200中时钟功能设定和读写调用的具体方法
S7-1200中时钟功能设定和读写调用的具体方法
POJ - Chessboard(奇偶建图+二分匹配)
题目链接:http://poj.org/problem?id=2446 Time Limit:2000MSMemory Limit:65536K Description Alice and Bob often play games on chessboard. One day, Alice draws a board with size M * N. She wants Bob to u...
Coze实战:解锁多Bot协同与条件分支工作流的奥秘
本文详细介绍了在字节跳动Coze平台实现多Bot协同与条件分支工作流的方法。首先阐述了Coze平台的功能优势,包括丰富的插件、知识库和工作流功能。随后分步骤讲解了多Bot协同的实现:从准备工作、创建Bot到协同配置,并提供了电商客服的实例演示。在条件分支工作流部分,详细说明了条件节点的作用类型、条件设定方法以及具体配置操作,强调测试优化的重要性。最后通过电商平台综合案例,展示了多Bot协同与条件分支的实际应用效果,并针对常见问题提供解决方案。文章为开发者在Coze平台上构建智能应用提供了实用指导,有助于提升
Codeforces510E Fox And Dinner(最大流-奇偶建图+路径打印)
搬运大佬题解系列:http://blog.youkuaiyun.com/qwb492859377/article/details/49021453 传送门:点击打开链接 题意: n只狐狸,每个狐狸对应了一个数字,现在要把n只狐狸分成很多个圈坐着,每个圈中至少要有3只,且相邻两只狐狸对应的数字只和必须是质数 思路: 由于相加必须是质数。,且有对应的那个数字>=2,说明这
OpenClaw实战系列03:Slack/Telegram国际版接入实战指南
在当今的软件开发和工作流自动化中,将项目管理工具与即时通讯平台集成已成为提高团队协作效率的关键。OpenClaw作为一个开源的自动化工具,通过接入Slack和Telegram国际版,可以实现实时通知、自动化任务触发和团队协作的无缝对接。本文将详细介绍如何实现OpenClaw与这两个主流即时通讯平台的集成。OpenClaw是一个开源的自动化工作流引擎,支持多种触发器和执行器,能够帮助开发团队实现CI/CD流程、任务调度、监控告警等自动化场景。模块化设计:支持插件化扩展多触发器支持。
手把手教你双目测距理论及生成视差图,深度图,点云图像
Stereo Vision, 也叫双目立体视觉,它的研究可以帮助我们更好的理解人类的双眼是如何进行深度感知的。双目视觉在许多领域得到了应用,例如城市三维重建、3D模型构建(如kinect fusion)、视角合成、3D跟踪、机器人导航(自动驾驶)、人类运动捕捉(Microsoft Kinect)等等。双目测距也属于双目立体视觉的一个应用领域,双目测距的基本原理主要是三角测量原理,即通过视差来判定物体的远近。
LightOJ--1152--Hiding Gold(二分图奇偶建图)(好题)
Hiding Gold Time Limit: 2000MS Memory Limit: 32768KB 64bit IO Format: %lld & %llu Submit Status Description You are given a 2D board where in some ce...
【时时三省】vector cast (vcast) 集成测试使用教程
山不在高,有仙则名。水不在深,有龙则灵。----优快云 时时三省。
POJ2446-Chessboard【最大匹配,二分图,奇偶建图】
正题 大意 一个n*m的棋盘上有k个洞,将1*2的木条放在上面,不能铺在洞上,不能重叠,求能不能铺满整个棋盘。 解题思路 用点来建立二分图,然后求最大匹配。 但是奇偶建图会快两倍。奇偶建图就是相邻的块可以相连接,所以它们可以不放在同一边。 代码 #include<cstdio> #include<cstring> #include&...
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
POJ ~ 2446 ~ Chessboard (二分图匹配 + 奇偶性建图)
题意:输入三个数字m,n,k。表示m*n的图中有k个洞,然后输入这k个洞的坐标(y,x),y表示列,x表示行。问拿1*2的木块去是否能铺满这个图,木块不允许覆盖,有洞的地方不允许放。 思路:打死我也想不到这是二分图匹配问题。首先图中的点可以分为两部分,(i+j)为偶数的点,(i+j)为奇数的点,铺砖其实就相当于如果选择一个奇数点那么一定要选择一个偶数点。这样这个图就分为了两部分,奇数点集合...
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
Poj_2446 Chessboard -考建图
题目:询问在给定的棋盘中能否用1×2的矩形块填满。 吐槽:由于是二分图专题中,所以毫无悬念地往二分图那边想,而且之前做多校遇到过一个类似的棋盘的题,不过那题目挺难的,是统计连通二分图的个数。 由于刚开始写二分图,所一用了比较蠢的建图方法。网上说用奇偶建图,而我用正负交替建的。 奇偶建图: /**************************************...
poj-2446-Chessboard
poj-2446-Chessboard Chessboard Time Limit:2000MS Memory Limit:65536K Total Submissions:19476 Accepted:6147 Description Alice and Bob often play games on chessbo...
POJ-2446-Chessboard(二分图匹配)
链接:https://vjudge.net/problem/POJ-2446#author=0 题意: 有一天,罗老板画了一块尺寸为M * N的棋盘。他希望许老师能够使用1 * 2的牌来覆盖棋盘。然而,他认为这很容易,所以他增大了难度,他在棋盘上打了一些洞许老师必须遵守以下规则:1.任何不是洞网格都应该只被一张卡覆盖。2. 一张卡应该正好覆盖2个相邻非洞网格。3. 洞不可以被卡片覆盖 ...
POJ 2446 Chessboard(奇偶建点法+最大匹配)
题目地址 题意:你有很多1*2的小纸条,你有一个棋盘,棋盘上有许多空洞,空洞上面是不能放小纸条的,要你求出这个棋盘除了空洞以外的所有格子能不能被小纸条覆盖 思路:我不知道为什么通过吧(x,y)坐标化成x*m+y的形式去存是不行的(没有想明白),只有用奇偶建点发才行。 奇偶建点法就是因为他要由相邻的两个块组成一个1*2的块,所有这两个块的(x+y)是一奇一偶的,所以可以用奇偶去表示这两个块。
Chessboard POJ - 2446 二分图最大匹配
题意 给出n*m矩阵,给出k个漏洞所在坐标,问能不能用1*2的模板覆盖完全不是漏洞的点。 思路 按行+列奇偶性来分成两部分,因为1*2的矩形覆盖的和值一定奇偶性不同,和值为奇数的向上下左右(和值一定是偶数)连边,注意预处理出来每个点的标号。 #include <algorithm> //STL通用算法 #include <bitset> /...
POJ 2446 Chessboard
经典的奇偶建图,这个模型有必要记一下。 网络流过了。 #include #include #include #include #include #include #include #include #include #include using namespace std; const int maxn = 40*40; const int INF = 0x3f3f3f3
POJ 2446 Chessboard 匹配/最小路径覆盖
http://poj.org/problem?id=2446 跟 poj 3020差不多 以前做过一个最小路径覆盖的题,读完这个题就想到了最小路径覆盖。很多大神用的完全匹配,有一点值得学习,就是根据i+j的奇偶性,把点分成两个集合,这样也可以?! 最小路径覆盖的代码(为什么我的运行时间那么长??): 代码: #include<iostream> #include&...
POJ2446_Chessboard(二分图最大匹配)
解题报告 题目传送门 题意: M×N的矩阵,k个点被标记,用2×1的木板最多可以放置多少个。 思路: 把标记的格子除外,链接相邻的两个格子,然后最大匹配出来的是二分图的两倍。 c++TLE了,G++1700+过了,理论上匈牙利算法的时间复杂度是n^3,就应该超时,可能数据弱吧。 还有一种建图方式就是建成二分图,将矩阵中的点奇偶分。 #include #include #incl
poj2446 Chessboard
判断是否是完全匹配,和poj3020相似,给格子编号,由于水平不够效率很低,很多大神用的完全匹配,有一点值得学习,就是根据i+j的奇偶性,把点分成两个集合。 #include #include using namespace std; bool vis[33*33]; int result[33*33]; bool edge [33*33][33*33]; struct c { int x
[POJ] 2446 Chessboard(二分图最大匹配)
题目地址:http://poj.org/problem?id=2446 本题建图是关键。因为卡片都是1*2,所以若点V被某个1*2卡片覆盖,则周围包含V的其它1*2区域都不成立。所以想到只要把V点划分在X集合,周围点在Y集合,V向周围点分别连边,就变成了二分图匹配问题,区分点V与周围点可以用横纵坐标之和的奇偶性。若棋盘上除障碍外都能被1*2卡片覆盖,则最大匹配数ans=(棋盘所有点数n*m-障碍...
299



被折叠的 条评论
为什么被折叠?



