隐藏页面特效

3052 多米诺[二分图匹配]

3052 多米诺

 

 时间限制: 1 s
 空间限制: 256000 KB
 题目等级 : 钻石 Diamond
 
 
 
题目描述 Description

一个矩形可以划分成M*N个小正方形,其中有一些小正方形不能使用。一个多米诺骨牌占用两个相邻的小正方形。试问整个区域内最多可以不重叠地放多少个多米诺骨牌且不占用任何一个被标记为无法使用的小正方形。

输入描述 Input Description

第一行有两个用空格隔开的正整数M和N。

    第二行有一个正整数K,表示共有K个小正方形不能使用。输入数据保证K<=M*N。

    以下K行每行有两个用空格隔开的数X和Y,表示第X行的第Y个小正方形不能使用。

输出描述 Output Description

输出最多能放多少个多米诺骨牌。

样例输入 Sample Input

3 3

2

1 1

2 2

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

对于30%的数据,M=1;

    对于50%的数据,M<=2;

    对于70%的数据,M<=3;

    对于100%的数据,M<=50,N<=50。

分类标签 Tags 点此展开 

 
AC代码:
/* 二分图匹配问题 问题是从一坨方格关系中选出尽量多的关系,使每个方格只选一次。 通过观察我们可以发现,横坐标加纵坐标是偶数的方格只能和奇数的方格匹配,所以就变成了二分图的匹配问题。 */ #include<cstdio> #include<cstring> using namespace std; const int N=55; const int M=N*N; int n,m,cas,ans,tot,head[M],match[M],g[N][N]; bool vis[M]; struct node{ int v,next; }e[M*10]; void add(int x,int y){ e[++tot].v=y; e[tot].next=head[x]; head[x]=tot; } bool hungury(int u){ for(int i=head[u],v;i;i=e[i].next){ v=e[i].v; if(!vis[v]){ vis[v]=1; if(!match[v]||hungury(match[v])){ match[v]=u; return 1; } } } return 0; } int main(){ scanf("%d%d%d",&n,&m,&cas); for(int x,y;cas--;) scanf("%d%d",&x,&y),g[x][y]=1; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if((i+j&1)||g[i][j]) continue; if(!g[i-1][j]&&i-1>=1) add((i-1)*m+j,(i-2)*m+j); if(!g[i+1][j]&&i+1<=n) add((i-1)*m+j,i*m+j); if(!g[i][j-1]&&j-1>=1) add((i-1)*m+j,(i-1)*m+j-1); if(!g[i][j+1]&&j+1<=m) add((i-1)*m+j,(i-1)*m+j+1); } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if((i+j&1)||g[i][j]) continue; memset(vis,0,sizeof vis); if(hungury((i-1)*m+j)) ans++; } } printf("%d",ans); return 0; }

 

 

__EOF__

本文作者shenben
本文链接https://www.cnblogs.com/shenben/p/6054394.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   神犇(shenben)  阅读(367)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示