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

Halcon 形态学 开发案例 (开运算opening(先腐蚀再膨胀)、闭运算closing(先膨胀再腐蚀)) 算子方法:功能:使用用户自定义的结构元素对区域进行开运算参数: Region(输入参数) :输入区域 StructElement(输入参数) :结构元素(区域) RegionOpening(输出参数) :开运算后的区域功能:使用圆形结构元素对区域进行开运算参数: Region(输入参数) :输入区域 RegionOpening(输出参数) :开运算后的区域 Radius(输入参数) :圆形结构元素的半径功能:使用矩形结构元素对区域进行开运算。 阅读详情

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;
}






科研绘图系列:R语言绘制差异蝴蝶图(Butterfly Chart) 科研绘图系列:R语言蝴蝶图(Butterfly Chart) 阅读详情

相关推荐

Windows报错“The system cannot find the file specified“的PATH环境变量解决方案

摘要: Windows系统中出现"The system cannot find the file specified"错误通常因PATH环境变量配置问题导致。本文提供解决方案:1)检查并修正PATH变量(通过命令行或图形界面添加缺失路径);2)确认程序安装路径及拼写无误;3)恢复误改的系统变量。示例演示了Python路径配置及无效路径清理方法,建议谨慎修改变量、使用绝对路径并定期检查。附参考表格详述操作步骤,帮助用户高效解决问题并优化系统环境。

shejizuopin的博客 3516

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

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

zyy.cpp 的博客 538

AI中台系统设计方案探讨

集成JupyterLab、低代码建模工具(如H2O.ai)、预训练模型库(Hugging Face、PaddleHub)。:通过REST/gRPC接口封装AI能力(如OCR、语音识别),支持流量控制与鉴权(如Kong、Apigee)。:服务注册发现(Consul)、熔断降级(Hystrix)、监控告警(Prometheus+Grafana)。:分布式存储(如HDFS、Ceph)与对象存储(如S3、OSS),支持海量数据高速读写。加密传输(TLS)、动态脱敏(如数据掩码)、访问控制(RBAC)。

reset2021的博客 1032

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

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

scf0920 973

Lm317电压源芯片制作电流源

还在找电流源芯片么?如何使用电压源芯片快速搭建电流源。

Ekko的博客 1万+

jmeter小白下载安装步骤

本文仅仅简单介绍了jmeter工具的下载安装,以及基础的操作步骤。

昔年@曦的博客 3492

POJ2446——匈牙利算法讲解

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

csl784513390的博客 992

文件上传漏洞攻击与防范方法

文件上传漏洞攻击与防范方法 文件上传漏洞简介: 文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。 文件上传漏洞危害: 上传漏洞与SQL注入或 XSS相比 , 其风险更大 , 如果 Web应用程序存在上传漏洞 , 攻击者上传...

m0_38103658的博客 4万+

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

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

每天心塞一点点 658

机器翻译的评价标准:BLEU、ROUGE等指标说明及代码实现

机器翻译领域常用的自动评价指标主要包括BLEU、ROUGE、METEOR和COMET四大类。BLEU基于n-gram精确率和短句惩罚,ROUGE关注召回率,METEOR结合精确率和召回率并考虑同义词,COMET则利用预训练模型计算语义相似度。这些指标各有特点:BLEU适用于机器翻译,ROUGE对长句友好,METEOR更接近人工评分,COMET无需参考译文。代码实现上,sacrebleu、rouge-score等库提供了便捷的计算方式。新兴趋势包括基于BERT等模型的语义评估和大语言模型评估器,但传统指标仍占

数据知道的博客 9417

1篇1章4节:生成对抗网络GAN和图像生成领域的StyleGAN

AI图像生成技术的革命性突破:从GAN到StyleGAN 近年来,人工智能在图像生成领域取得显著进展,尤其是生成对抗网络(GAN)的发展推动了技术的飞跃。从早期的基础GAN到渐进式GAN(Progressive GAN),再到革命性的StyleGAN,AI生成图像的逼真度已接近人类创作水平。StyleGAN通过引入风格潜向量和自适应实例归一化,实现了对图像风格与内容的精细控制,广泛应用于人脸生成、艺术创作及影视行业。后续的StyleGAN2解决了“斑点”问题,StyleGAN3进一步优化纹理过渡,提升了图像

MD Code 218

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

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

一名计科学生的成长 658

什么是DHCP Snooping?如何配置DHCP Snooping?

功能描述防护类型防御伪造 DHCP 服务器、避免地址冲突、增强网络安全性使用场景企业园区网、校园网、大型局域网配合机制IP Source Guard、DAI、防止 ARP 欺骗部署难度⭐⭐(简单)“DHCP Snooping,是内网 DHCP 安全防护的第一道门神。” 🛡️。

网络技术联盟站 1267

的二分图poj2446

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

weixin_34326558的博客 119

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

二分图的最大匹配

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

miao6664659的专栏 735

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

二分图之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、付费专栏及课程。

余额充值