题意:

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

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

分析:

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

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

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

这波建图好是经典;

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

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

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

  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<map>
  5. #include<stack>
  6. #include<algorithm>
  7. using namespace std;
  8. #define N 1500
  9. int ma[N][N];
  10. int ls[N][N];
  11. int n,m,t;
  12. int cx[N];
  13. int cy[N];
  14. int ji,ou;
  15. bool vis[N];
  16. int findpath(int u)
  17. {
  18. for(int i=1;i<ou;i++)
  19. {
  20. if(!vis[i]&&ma[u][i])
  21. {
  22. vis[i]=1;
  23. if(cy[i]==-1||findpath(cy[i]))
  24. {
  25. cx[u]=i;
  26. cy[i]=u;
  27. return 1;
  28. }
  29. }
  30. }
  31. return 0;
  32. }
  33. void solve()
  34. {
  35. memset(cx,-1,sizeof(cx));
  36. memset(cy,-1,sizeof(cy));
  37. int ans=0;
  38. for(int i=1;i<ji;i++)
  39. {
  40. memset(vis,0,sizeof(vis));
  41. ans+=findpath(i);
  42. }
  43. ans*2==(m*n-t)?printf("YES\n"):printf("NO\n");
  44. }
  45. int main()
  46. {
  47. while(~scanf("%d%d",&n,&m))
  48. {
  49. scanf("%d",&t);
  50. memset(ls,0,sizeof(ls));
  51. for(int i=0;i<t;i++)
  52. {
  53. int x,y;
  54. scanf("%d%d",&x,&y);
  55. ls[y][x]=-1;
  56. }
  57. ji=ou=1;
  58. for(int i=1;i<=n;i++)
  59. {
  60. for(int j=1;j<=n;j++)
  61. {
  62. if(ls[i][j]!=-1)
  63. {
  64. if((i+j)%2==0)
  65. ls[i][j]=ji++;
  66. else
  67. ls[i][j]=ou++;
  68. }
  69. }
  70. }
  71. memset(ma,0,sizeof(ma));
  72. for(int i=1;i<=n;i++)
  73. {
  74. for(int j=1;j<=m;j++)
  75. {
  76. if(ls[i][j]!=-1&&(i+j)%2==1)
  77. {
  78. if(ls[i-1][j]>=1)
  79. ma[ls[i-1][j]][ls[i][j]]=1;
  80. if(ls[i+1][j]>=1)
  81. ma[ls[i+1][j]][ls[i][j]]=1;
  82. if(ls[i][j-1]>=1)
  83. ma[ls[i][j-1]][ls[i][j]]=1;
  84. if(ls[i][j+1]>=1)
  85. ma[ls[i][j+1]][ls[i][j]]=1;
  86. }
  87. }
  88. }
  89. solve();
  90. }
  91. return 0;
  92. }
  93. [ls[i][j]]=1;
  94. }
  95. }
  96. }
  97. solve();
  98. }
  99. return 0;
  100. }

POJ2446【建图建图】的更多相关文章

  1. Codeforces Gym101170I:Iron and Coal(建多幅图+多次BFS)***

    题目链接 题意 有n个点,其中有m个点是铁矿,k个点是煤,从1号点出发,你可以派一些士兵跑向不同的点,问占领至少一个铁矿和一个煤的时候,最少需要占领多少个点. 思路 建两幅图,其中一幅是正向边,一幅是 ...

  2. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  3. UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  4. 使用axes函数在matlab绘图中实现图中图的绘制

    使用axes函数在matlab绘图中实现图中图的绘制 有时为了对细节进行详细说明,需要在一个较大坐标轴上绘制一个小图来对局部进行放大以阐述结果. 这可以通过调用axes函数实现. 下面通过绘制 y=1 ...

  5. Echarts-柱状图柱图宽度设置

    先看两张图 图中柱图只需要设置series中的坐标系属性barWidth就可以, 这种图柱状图,折叠柱状图都适应 eg: /** * 堆积柱状图 * @param xaxisdata x轴:标签(数组 ...

  6. C# 绘制统计图(柱状图, 折线图, 扇形图)【转载】

    统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的:这里我们用 ...

  7. C# 绘制统计图(柱状图, 折线图, 扇形图)

    统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的:这里我们用 ...

  8. Asp.net 用 Graphics 统计图(柱状图, 折线图, 扇形图)

    统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的:这里我们用 ...

  9. UML九种图-包图、类图

    UML九种图-包图.类图 一.包 (一)相关概念: 1.包: 一个包=一层=一个命名空间=一个文件夹 2.包的命名: 简单名:王老二 路径名:中国.河北省.廊坊市.廊坊师范学院.信息技术提高班.九期班 ...

  10. 如何增强ArcGIS插值图出图效果

    如何增强ArcGIS插值图出图效果 by 李远祥 在一些科研领域,经常会遇到使用插值的方式进行处理,并生成最终的插值图.插值图在ArcGIS里面非常容易生成,只要具备了采用点数据,通过ArcToolB ...

随机推荐

  1. C#语言 语句

    //有一组函数: //y=x(x<1) //y=2x-1(1<=x<10) //y=3x-11(x>=10) //括号内是x的满足条件 //实现功能,随意输出x /*Conso ...

  2. no matching provisioning profiles found

    问题:真机连上,执行这个提示. 解决: 项目->targets->Bulid Settings-> 1,Provisioning Profile->选择配置Bundle Ide ...

  3. 基于bootstrap_登陆页面

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 基于redis集群实现的分布式锁,可用于秒杀商品的库存数量管理,有測试代码(何志雄)

    转载请标明出处. 在分布式系统中,常常会出现须要竞争同一资源的情况,本代码基于redis3.0.1+jedis2.7.1实现了分布式锁. redis集群的搭建,请见我的另外一篇文章:<>& ...

  5. 【Android】Android聊天机器人实现

    昨天看到一个Android视频教程讲图灵机器人.那个API接口用起来还是挺方便的,就准备自己动手做一个了. 另外自己还使用了高德地图的API接口用于定位(曾经用过高德的接口,比X度方便) 大体流程: ...

  6. poj 3585 Accumulation Degree(二次扫描和换根法)

    Accumulation Degree 大致题意:有一棵流量树,它的每一条边都有一个正流量,树上所有度数为一的节点都是出口,相应的树上每一个节点都有一个权值,它表示从这个节点向其他出口可以输送的最大总 ...

  7. 主线程 view

    参考https://blog.csdn.net/u011001142/article/details/50912358

  8. bzoj4105: [Thu Summer Camp 2015]平方运算

    填坑 我不知道怎么算的,但是所有环的LCM数不会超过60 然后用线段树维护这个东西,每个节点记录子树内的循环节 没到循环节的暴力枚举 复杂度是nlogn再乘以循环节长度 #include<cst ...

  9. POJ 2739 Sum of Consecutive Prime Numbers( *【素数存表】+暴力枚举 )

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 19895 ...

  10. 【原】WPF客户端只能启动一次

    public partial class App : Application { System.Threading.Mutex mutex; public App() { this.Startup + ...