poj 2446 二分图最大匹配 匈牙利算法

新手避坑指南:用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR,这些参数设置错了白忙活 本文详细介绍了使用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR时的关键参数设置技巧,帮助新手避免常见错误。重点解析了连接图生成、干涉工作流、DEM处理等环节的12个关键参数,包括Max Normal Baseline、Unwrapping Coherence Threshold等,提供实测安全值范围和优化建议,确保处理效率和结果准确性。 阅读详情

Chessboard
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 14525 Accepted: 4513

Description

Alice and Bob often play games on chessboard. One day, Alice draws a board with size M * N. She wants Bob to use a lot of cards with size 1 * 2 to cover the board. However, she thinks it too easy to bob, so she makes some holes on the board (as shown in the figure below).

We call a grid, which doesn’t contain a hole, a normal grid. Bob has to follow the rules below:
1. Any normal grid should be covered with exactly one card.
2. One card should cover exactly 2 normal adjacent grids.

Some examples are given in the figures below:

A VALID solution.


An invalid solution, because the hole of red color is covered with a card.


An invalid solution, because there exists a grid, which is not covered.

Your task is to help Bob to decide whether or not the chessboard can be covered according to the rules above.

Input

There are 3 integers in the first line: m, n, k (0 < m, n <= 32, 0 <= K < m * n), the number of rows, column and holes. In the next k lines, there is a pair of integers (x, y) in each line, which represents a hole in the y-th row, the x-th column.

Output

If the board can be covered, output "YES". Otherwise, output "NO".

Sample Input

4 3 2
2 1
3 3

Sample Output

YES

Hint


A possible solution for the sample input.



像这种n×m的棋盘图是经典的二分图,将(i+j)%2==0的点定为偶点,(i+j)%2==1的点定为奇点。一个覆盖就是一个偶点和奇点匹配。

将每个偶点与相邻的奇点连接一条边,求出二分图最大匹配数×2==n*m-k,检查是否所有的点都被匹配了。

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
using namespace std;
#define maxn 1024
int dx[4]={-1,0,1,0}, dy[4]={0,1,0,-1};
vector<int> g[maxn];

void add(int u, int v)
{
    g[u].push_back(v);
}
int mp[32][32];
int n,m,k;
int match[maxn];
int vis[maxn];
int dfs(int u)
{
    vis[u]=1;
    for(int i=0; i<g[u].size(); i++){
        int v=g[u][i], m=match[v];
        if(m==-1 || !vis[m]&&dfs(m)){
            match[v]=u;
            match[u]=v;
            return 1;
        }
    }
    return 0;
}

int hungry()
{
    int res=0;
    memset(match, -1, sizeof(match));
    int odd=(n*m)/2;
    for(int i=0; i<odd; i++){
        if(match[i]<0){
            memset(vis, 0, sizeof(vis));
            res+=dfs(i);
        }
    }

    return res;
}

int main()
{
    while(scanf("%d%d%d", &n, &m, &k)==3){
        for(int i=0; i<n*m/2; i++) g[i].clear();
        int u,v;
        memset(mp, 0, sizeof(mp));
        for(int i=0; i<k; i++){
            scanf("%d%d", &u, &v);
            swap(u,v);
            u--; v--;
            mp[u][v]=1;
        }

        int odd=(n*m)/2;
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++)
            if((i+j)%2==0 && !mp[i][j]){
                u=(i*m+j)/2;
                for(int d=0; d<4; d++){
                    int ni=i+dx[d], nj=j+dy[d];
                    if(mp[ni][nj]||ni<0 || nj <0 || ni>= n || nj>=m) continue;
                    v=odd+(ni*m+nj)/2;
                    add(u,v);
                }
            }
        }

        int res=hungry()*2;
        if(res==n*m-k)
            puts("YES");
        else puts("NO");

    }
    return 0;
}






Microsoft Dynamics 365软件二次开发:Dynamics365部署与版本控制策略 在Microsoft Dynamics 365中,自定义实体允许开发者扩展系统以满足特定业务需求。自定义实体可以包含字段、选项集、关系和其他属性,与标准实体类似,但完全由用户定义。1. 登录到Dynamics 365环境。2. 转到“解决方案”区域,选择“自定义”。3. 在“自定义”菜单中,选择“实体”。4. 点击“新建”,输入实体名称,例如“客户反馈”。5. 添加字段,如“反馈类型”、“反馈日期”、“描述”等。6. 设置主键和唯一标识符。7. 定义关系,如与“客户”实体的关联。 阅读详情

相关推荐

深入理解HTTPS:从SSLHandshakeException到证书链验证的完整解析

本文深入解析了HTTPS握手过程中常见的SSLHandshakeException异常,特别是由证书链验证失败引发的CertPathValidatorException。文章从TLS握手流程、证书链验证的数学原理出发,详细剖析了Java中TrustManager的工作机制,并提供了针对证书链不完整、自签名证书等典型问题的系统化排查流程与实战解决方案。

weixin_29313423的博客 231

poj2446 Chessboard 二分图最大匹配 思考 匈牙利算法BFS实现

POJ 2446 点击打开链接 大致题意: 有一个m*n棋盘,上面有k个洞,你现在有许多个规模为1*2的小卡片。你可以将卡片覆盖在棋盘上(卡片必须整个覆盖在棋盘上),正好覆盖一个1*2的空间,但是不能覆盖有洞的棋盘格子。问,你是否能用一些卡片(不限个数),将棋盘的无洞格子全都覆盖? 例如: (1): 它是合法的,全部覆盖。 (2) 不合法,因为有一个洞被覆盖了。 (3)

zyy.cpp 的博客 538

汇丰外包Java岗面试复盘:Zoom面1.5小时,从英语、粤语到现场敲代码的极限挑战

本文详细记录了汇丰银行外包Java岗位的面试全过程,包括多语言切换(英语、粤语)的技术沟通挑战和现场编码测试的实战经验。从高并发编程到JVM调优,面试不仅考察技术深度,更注重实战问题解决能力。文章分享了应对跨国银行技术面试的实用策略,帮助Java开发者在跨文化环境中提升竞争力。

weixin_42524824的博客 363

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

题目地址:http://poj.org/problem?id=2446 这题

scf0920 973

SAP 分期付款,付款条件的要件定义方法

以上内容做好后,可以在F-02或者F-60里看设置后的结果。找到相关路径选择【维护支付条件】点击进入后,选择【新条目】再设置一个总的支付规则,注意这里【付款条款】一定要选择。例:默认付款条件SP00,改成刚定义好的0028即可。将刚才基础创建的付款条件,以以下方式录入,注意。028A- 30天到期,过账日期基础。028B- 60天到期,过账日期基础。028C- 90天到期,过账日期基础。目的:新建支付条款(本次以。的选择,然后保存后,完成。,【基准日期缺省值】选择。基础创建好了以后,选择【

晴天的博客分享技术知识 2936

古月学院《如何在Gazebo中实现阿克曼转向车的仿真》课程资料在ROS Noetic版本中运行时的常见错误及解决方法

   最近想在Gazebo中开发一些仿真内容,于是购买了古月学院的《如何在Gazebo中实现阿克曼转向车的仿真》课程,但是由于ROS 版本的更新,拿到手的课程资料不能直接在ROS Noetic版本中运行,经过我这几天的探索,对遇到的错误及解决方法进行了整理,方便后面购买课程的小伙伴更快的成功运行程序    在文章正式开始之前,先放一下我之前为了寻找该资料报错的原因,而写的两篇与该课程相关的文章链接,感兴趣的可以自行阅读    以阿克曼转向车为例对URDF和XACRO文件进行解读(点击可跳转)    将x

慕羽★的博客 5974

POJ2446——匈牙利算法讲解

POJ2446——chessboard(匈牙利算法) 二分图最大匹配数。acm新手上路

csl784513390的博客 992

【EPS精品教程】EPS2016三维测图版安装教程(附EPS2016安装包下载地址)

EPS地理信息工作站是北京清华山维新技术开发有限公司历经十五年精心研发和打造,为满足“以地理信息服务为中心”的信息化测绘生产需求而推出的测绘生产活动多种业务模块集成化软件系统。主要功能有:(1)测绘与地理信息多业务模块集成管理;(2)多元多尺度多种类数据集成管理;(3)跨平台异构数据转换;(4)数据监理;(5)自动缩编与综合;(6)坐标转换与动态投影;(7)地理信息模板定制;(8)GIS地理信息描述与CAD图形表达一体化支持;(9)GIS数据库更新维护;(10)图形打印与地图出版。 一、安装过程 EP..

智慧空间实验室 2万+

【二分图最大匹配】【匈牙利算法】poj1469 COURSES && poj2446 Chessboard

其实KM算法很简单……但是这两道题折腾了我一下午加半个晚上 = = 主要是建图太虐了啊啊啊然后题又坑。。各种对拍最后终于撸对了(P.S. 我在网上找的用来对拍的code竟然也是错的!明明还是AC code呢= =) COURSES Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18294 Accepted:

每天心塞一点点 658

YOLOv8安防监控实战:跌倒/闯入/徘徊实时检测(附TensorRT加速+声光报警部署代码)

精准性:针对跌倒/闯入/徘徊的行为特征优化,准确率达89.3%,误报率低于5次/天;实时性:TensorRT加速到50+FPS,报警延迟<1秒,满足安防“黄金响应时间”;低成本:无需专用AI芯片,RTX 3060或Jetson Orin就能跑,硬件成本比传统方案低60%;易部署:代码全开源,提供从模型训练到硬件联动的完整流程,2天即可搭起原型系统。如果你的安防监控还在“漏报误报”“响应慢”,建议先从跌倒检测的姿态过滤改起——用100张样本测试,再集成TensorRT加速,90%能看到明显改善。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 680

基于投影法实现扫描文件的光学字符分割——Matlab实现

投影法是指将原图像沿着某个特定的方向进行投影,得到投影线上的像素点的个数或像素值总和,从而可以得到该方向上物体的轮廓信息。对于字符分割,我们可以将图像进行水平和垂直两个方向的投影,从而得到字符之间的分割线。在OCR技术中,字符分割是非常重要的一步骤,因为字符之间的分割对字符识别的准确性有很大的影响。通过对投影值的判断,可以求出字符之间的分割线,这里我们根据垂直方向上的投影值进行判断,选取一个阈值进行筛选即可。使用sum()函数分别计算出水平和垂直方向上的投影值,得到每一行和每一列的投影值。

TechGlide的博客 581

poj 2446(二分图匹配-通俗易懂)

题目链接:http://poj.org/problem?id=2446题目大意:给出一个N*M的棋盘,棋盘有些格子是不能放东西的。现在要判断在所以可以放东西的格子上是否能用1*2的小方块填满题目思路:小木块有两个格子,对于棋盘上的每一个格子,如果可以放东西,那么小木块的另一个格子一定在棋盘上这个格子的上下左右。那么对于整个棋盘,从上到下从左到右给它编号1到n*m,并将每一个格子(如果可以放东西)与...

一名计科学生的成长 658

【ComfyUI】Wan2.2 动态服饰描述驱动换装图生视频

本文介绍了一个基于ComfyUI的Wan2.2动态服饰描述驱动换装工作流,能通过自然语言描述实现人物图像的自动换装并生成动态视频。该工作流结合多模态输入、语言模型驱动生成和视频合成技术,包含图像加载、文本解析(使用Qwen2.5大模型)、潜变量编码、视频帧采样与插值(RIFE VFI)等核心模块,最终通过VHS_VideoCombine输出流畅换装视频。整个流程无需手动干预,支持从"哥特风格"到"未来装甲"等多样化服饰风格的精确转换,通过文本节点控制50-100

Mr数据杨 2583

的二分图poj2446

称号:poj2446 意甲冠军:给定一个m*n矩阵,在有些地方坑,然后1*2本文叠加,反复。可以把出了坑的地方其它所有覆盖的话输出YES,否则NO 分析:有一道二分图经典题目,当然难点还是建图,一直没有思路,早上来忽然想到能够用(i-1)*m+j 吧矩阵中每一个点转化为一个数,然后相邻连接起来建图,匈牙利,可是不知道为什么不正确?求大神解释、还是理解不够深。 ...

weixin_34326558的博客 119

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

二分图的最大匹配

转自:http://blog.youkuaiyun.com/hackbuteer1/article/details/7398008 例题: http://poj.org/problem?id=1469  COURSES 有了匈牙利算法的基础,该题就是一道非常简单的题目了:该题给出P门课程,N个学生,问能否从中选出P个学生,使每个学生上不同的课,且每个课程有一个学生。典型的二分图匹配的问题,我

miao6664659的专栏 735

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

二分图之poj2446

题目:poj2446 题意:给出一个m*n的矩阵,其中有的地方有坑,然后用1*2的纸片去覆盖图,纸片不能重复,能够把出了坑的地方其他全部覆盖的话输出YES,否则NO 分析:有一道二分图经典题目,当然难点还是建图,一直没有思路,早上来忽然想到可以用(i-1)*m+j 吧矩阵中每个点转化为一个数,然后相邻连接起来建图,匈牙利,但是不知道为什么不对?求大神解释、还是理解不够深。

大神养成中..... 2804

poj 2446 poj 1469 poj 1274 二分图最大匹配

题意: 给一张m * n的图,其中挖掉一些点,然后用1*2的小纸片来覆盖这张图,问能否将这个图覆盖。 如下图: 解析: 将每个不为挖掉的点视为二分图的X点集,这个点的四个方向上的点视为Y点集,此时最大匹配数即为点的个数(想一想为什么)。 因为有重复匹配 1和2                              2和1 这题用一个id数组来处理每个点的id,然后用匈牙利

渐近自由 442

poj2446 Chessboard【最大匹配】

题目链接:http://poj.org/problem?id=2446 题意:有一个n*m的棋盘,上面有k个洞,问你能不能用1*2,如果能就输出YES,否则输出NO 解析:如果把一个1*2的砖块能铺上去,看成一个格子和他相邻格子是有条边的,那么就可以把这个棋盘构成一个二分图,那么你只需要判断最大匹配是否等于空格数就可以了,注意:题目是先输入y再输入x#include <iostream> #in

22h's Blog 407

二分图匹配例题及拓展

例题 洛谷P1894 分析: 裸题,牛栏作为一个点集,牛作为另一个,牛喜欢牛栏则从牛向牛栏连一条边跑匈牙利就得了,邻接表开大点 代码: #include<bits/stdc++.h> #define MAXN (2000+5) using namespace std; inline int read(){ int cnt=0,f=1;char c; c=getchar(...

kma_093 182

poj 2446 Chessboard(二分图匹配)

题意:在一个N*M的矩形里,有K个hole 用1*2的木板去覆盖该矩形,每个木板只能覆盖相邻的两个格子,问是否能把每个格子都盖住。 思路:二分匹配。把图中能覆盖的格子从1 依次标号 若格子数为奇数 答案是NO 否则,把相邻的两个标号能连成一条边,求无向图的二分匹配数,当匹配数 == 格子数时,就能覆盖完。如下图 2446 Chessboard(二分图匹配)" TITLE="poj 2446 C

596

匈牙利最大匹配 poj2446 Chessboard

传送门:点击打开链接 题意:一个地图中,有一些障碍,然后有其他的空白位置,现在问是否能用1*2的骨牌覆盖所有的空白位置,骨牌不能有重叠。 思路:乍看有点像状压dp,又有点像搜索,但是正解是二分图的最大匹配,而且做起来特别简单。 首先,我们枚举每一个空白的点,枚举四个方向,如果相邻的格子也为空白的,那么就在两个格子之间连一条边,很容易证明,这样的连线方法一定是二分图。 因为所有的格子,能通过

qwb的博客 1048

POJ2446_Chessboard(二分图最大匹配)

解题报告 题目传送门 题意: M×N的矩阵,k个点被标记,用2×1的木板最多可以放置多少个。 思路: 把标记的格子除外,链接相邻的两个格子,然后最大匹配出来的是二分图的两倍。 c++TLE了,G++1700+过了,理论上匈牙利算法的时间复杂度是n^3,就应该超时,可能数据弱吧。 还有一种建图方式就是建成二分图,将矩阵中的点奇偶分。 #include #include #incl

_nplus 2531

POJ 2446 Chessboard(二分图匹配)

题目链接:点击打开链接 题意:给你一个n*m的棋盘, 上面有一些洞洞,要求放置若干1*2的木板, 洞洞位置不能放置, 其他位置要全部覆盖, 任意一个格子不能同时覆盖两块木板, 求能否完全覆盖。 思路:二分图匹配。 相邻两个格子, 行数 + 列数 一定是一个奇数一个偶数, 由此将格子分成两派, 匹配一些即可。  可以用最大流, 但是匈牙利算法更快, 而且代码短。 细节参见代码: #inclu

AC_Arthur的专栏 2611

poj 2446 二分图最大匹配

题意:给一张m*n的棋盘,上面有k个格子有洞,用1*2的骨牌将棋盘覆盖,每个格子必须被恰好覆盖一次,有洞的地方不能覆盖,问是否存在这样的方案。 思路:容易想到将格点作为二分图中的点,骨牌作为二分图中的边(骨牌可能放置时),求二分图的最大匹配,如果匹配数与n*m-k相等,则方案存在,否则不存在;容易想到当n*m-k为奇数时方案一定不存在; 构思时的难点在于将格点用一维坐标表示出来,后来...

dilujiuchunle5082的博客 193

二分图 匈牙利算法应用

匈牙利算法是kuangbin的 poj 1274 poj 2239 //水题 poj 2584 这个还是有点想法的,把每种衣服拆成n件衣服(每件衣服都是一个单独的节点),然后依次连接 下面是代码,思路还是比较清晰的 #include #include #include #include using namespace std; /* *****************

is_it_a_error的博客 414
上一篇: poj 1422 最小路径覆盖
下一篇: poj 1325 最小顶点覆盖
HuanTongH
博客等级 码龄12年 7粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值