题意:

给你一个n*n的矩阵,然后再给你几个坑,然后问你能否被1*2的长方形给覆盖;

  • -弱知道了是二分匹配的做法,但是弱还是不会转化,又是在建图上GG了

分析:

从国际象棋的那个黑白色理解,这是一张二分图(好像非常有道理)

建图:由于是1*2的纸片覆盖,那么这个区域的两个点的(i+j)必然是一个奇数和一个偶数。

先搞好点,我们分别给奇数、偶数点 依次从1开始标号,相邻的就是有一条边;

这波建图好是经典;

一般建图弱感觉就是:先搞点,再建图,有些还会再初始化一波;

然后就是求一下最大匹配,

如果最大匹配+K=N*M就输出”YES”,否则就是”NO”

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<map>
#include<stack>
#include<algorithm>
using namespace std;
#define N 1500 int ma[N][N];
int ls[N][N];
int n,m,t;
int cx[N];
int cy[N];
int ji,ou;
bool vis[N]; int findpath(int u)
{
for(int i=1;i<ou;i++)
{
if(!vis[i]&&ma[u][i])
{
vis[i]=1;
if(cy[i]==-1||findpath(cy[i]))
{
cx[u]=i;
cy[i]=u;
return 1;
}
}
}
return 0;
} void solve()
{
memset(cx,-1,sizeof(cx));
memset(cy,-1,sizeof(cy)); int ans=0;
for(int i=1;i<ji;i++)
{ memset(vis,0,sizeof(vis));
ans+=findpath(i); }
ans*2==(m*n-t)?printf("YES\n"):printf("NO\n");
} int main()
{
while(~scanf("%d%d",&n,&m))
{
scanf("%d",&t);
memset(ls,0,sizeof(ls));
for(int i=0;i<t;i++)
{
int x,y;
scanf("%d%d",&x,&y);
ls[y][x]=-1;
} ji=ou=1; for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(ls[i][j]!=-1)
{
if((i+j)%2==0)
ls[i][j]=ji++;
else
ls[i][j]=ou++;
}
}
}
memset(ma,0,sizeof(ma)); for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(ls[i][j]!=-1&&(i+j)%2==1)
{
if(ls[i-1][j]>=1)
ma[ls[i-1][j]][ls[i][j]]=1;
if(ls[i+1][j]>=1)
ma[ls[i+1][j]][ls[i][j]]=1;
if(ls[i][j-1]>=1)
ma[ls[i][j-1]][ls[i][j]]=1;
if(ls[i][j+1]>=1)
ma[ls[i][j+1]][ls[i][j]]=1;
}
}
}
solve();
}
return 0;
}
[ls[i][j]]=1;
}
}
}
solve();
}
return 0;
}

最新文章

  1. Web性能优化:What? Why? How?
  2. Jmeter+TCP\Scoket(8583)报文压力测试
  3. 美团HD(1)-设置导航栏主题
  4. Linux命令学习总结:shutdown
  5. YCSB-压测
  6. supervisord 小记
  7. 深入理解openstack网络架构(4)-----连接到public network
  8. JAVA while循环,do-while循环,for循环
  9. linux 使用 pyodbc 访问 ms sqlserver 数据库
  10. Lisp使用Lambda语法
  11. UC全屏
  12. Linux下Oracle常见安装错误[Z]
  13. Android 屏幕实现水龙头事件
  14. php按照中文首字母排序
  15. java程序调用xfire发布的webService服务
  16. Python基础_函数2
  17. vertx的ShardData共享数据
  18. jwt vs session 以rails 为例 (翻译部分)
  19. codeforces478C
  20. Nginx 和 PHP 的两种部署方式比较

热门文章

  1. UVA 11246 - K-Multiple Free set(数论推理)
  2. UBUNTU安装PHP,即所谓得LAMP
  3. 【 D3.js 进阶系列 — 1.2 】 读取 CSV 文件时乱码的解决方法
  4. VC编码规范(转)
  5. Kills all phantomjs instances, disregard of their origin python关闭进程
  6. node-orm2
  7. OOalv 实现带出栏位描述
  8. ossfs常见配置错误
  9. 设置label的字体
  10. iOS 摇一摇功能的实现