POJ3041

这道题正解对于像我这种蒟蒻来说比较难以想到。

我们发现每次覆盖的只是一条线上的所有点。那么我们可以把它想象成一个二分图,两个集合分别是横轴和纵轴。

想一想,这实际上是不是就是x轴轴和纵轴的最大匹配?

于是这就变成了一个板子匈牙利算法题目。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<ctype.h>
  6. #define R register
  7. using namespace std;
  8. inline int read()
  9. {
  10. int x=0,w=0;char c=getchar();
  11. while(!isdigit(c))w|=c=='-',c=getchar();
  12. while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
  13. return w?-x:x;
  14. }
  15. const int maxn=505,maxm=10005;
  16. int n,m;
  17. int mapp[maxn][maxn];
  18. bool vis[maxn];
  19. int match[maxn];
  20. bool find(int x)
  21. {
  22. for(R int i=1;i<=n;i++)
  23. if(mapp[x][i] and vis[i]==0)
  24. {
  25. vis[i]=1;
  26. if(match[i]==0 || find(match[i]))
  27. {
  28. match[i]=x;
  29. return 1;
  30. }
  31. }
  32. return 0;
  33. }
  34. int main()
  35. {
  36. n=read(),m=read();
  37. for(R int i=1;i<=m;i++)mapp[read()][read()]=1;
  38. int ans=0;
  39. for(R int i=1;i<=n;i++)
  40. {
  41. memset(vis,0,sizeof vis);
  42. if(find(i))ans++;
  43. }
  44. printf("%d",ans);
  45. return 0;
  46. }

洛谷P1129

这道题也差不多了,\(O(n^2)\)就能过。

也是求x和y轴的最大匹配。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<ctype.h>
  6. #define R register
  7. using namespace std;
  8. inline int read()
  9. {
  10. int x=0,w=0;char c=getchar();
  11. while(!isdigit(c))w|=c=='-',c=getchar();
  12. while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
  13. return w?-x:x;
  14. }
  15. const int maxn=505,maxm=10005;
  16. int n,m;
  17. int mapp[maxn][maxn];
  18. bool vis[maxn];
  19. int match[maxn];
  20. bool find(int x)
  21. {
  22. for(R int i=1;i<=n;i++)
  23. if(mapp[x][i] and vis[i]==0)
  24. {
  25. vis[i]=1;
  26. if(match[i]==0 || find(match[i]))
  27. {
  28. match[i]=x;
  29. return 1;
  30. }
  31. }
  32. return 0;
  33. }
  34. int main()
  35. {
  36. int t=read();
  37. k: while(t--)
  38. {
  39. memset(mapp,0,sizeof mapp);
  40. memset(match,0,sizeof match);
  41. n=read();
  42. for(R int i=1;i<=n;i++)
  43. for(R int j=1;j<=n;j++)mapp[i][j]=read();
  44. int ans=0;
  45. for(R int i=1;i<=n;i++)
  46. {
  47. memset(vis,0,sizeof vis);
  48. if(!find(i)){
  49. printf("No\n");
  50. goto k;
  51. }
  52. }
  53. printf("Yes\n");
  54. }
  55. return 0;
  56. }

最小覆盖问题-POJ3041-P1129的更多相关文章

  1. POJ3041轰炸行星(匈牙利算法 最小覆盖点集)

    Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25232   Accepted: 13625 Descr ...

  2. POJ-3041 Asteroids---二分图&最小覆盖点

    题目链接: https://vjudge.net/problem/POJ-3041 题目大意: 给一个N*N的矩阵,有些格子有障碍,要求我们消除这些障碍,问每次消除一行或一列的障碍, 最少要几次. 解 ...

  3. poj3020 建信号塔(匈牙利算法 最小覆盖边集)

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10518   Accepted: 518 ...

  4. POJ2185Milking Grid(最小覆盖子串 + 二维KMP)

    题意: 一个r*c的矩形,求一个子矩形通过平移复制能覆盖整个矩形 关于一个字符串的最小覆盖子串可以看这里http://blog.csdn.net/fjsd155/article/details/686 ...

  5. UVA 11419SAM I AM(输出 最小覆盖点 )

    参考博客:如何找取 最小覆盖点集合 题意:R*C大小的网格,网格上面放了一些目标.可以再网格外发射子弹,子弹会沿着垂直或者水平方向飞行,并且打掉飞行路径上的所有目标,计算最小多少子弹,各从哪些位置发射 ...

  6. 二维KMP - 求字符矩阵的最小覆盖矩阵 - poj 2185

    Milking Grid Problem's Link:http://poj.org/problem?id=2185 Mean: 给你一个n*m的字符矩阵,让你求这个字符矩阵的最小覆盖矩阵,输出这个最 ...

  7. KMP算法 - 求最小覆盖子串

    KMP与最小覆盖子串 最小覆盖子串:对于某个字符串s,它的最小覆盖子串指的是长度最小的子串p,p满足通过自身的多次连接得到q,最后能够使s成为q的子串. 比如: 对于s="abcab&quo ...

  8. hdu---(1054)Strategic Game(最小覆盖边)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. hdu------1281 棋盘游戏(最小覆盖点)

    棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

随机推荐

  1. switch分支语句

    语句句式 Calendar c = Calendar.getInstance(); //获得一周的某天 int i = c.get(Calendar.DAY_OF_WEEK); switch (i) ...

  2. 深入理解java虚拟机笔记Chapter7

    虚拟机类的加载机制 概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类的加载机制. 类加载的时机 J ...

  3. 【vim】常用总结

    简介 什么是vim? Linux下两大编辑神器之一 vim Linux/Unix下使用最多的编辑器 vi的改进版 可能是最难上手的编辑器之一 为什么要学习vim? 都21世纪了,为什么还需要学习vim ...

  4. 为什么我严重不建议去培训机构参加SAP培训?

    欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 关于是否要参加SAP培训的话题已经是老生常谈了,知乎上随便一搜有好多人在问是否要去参加SAP培训,底下已经有很多人在上面给出了正确建议.但也 ...

  5. markdown写ppt (史上最全)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  6. 【模拟8.05】优美序列(线段树 分块 ST算法)

    如此显然的线段树,我又瞎了眼了 事实上跟以前的奇袭很像....... 只要满足公式maxn-minn(权值)==r-l即可 所以可以考虑建两颗树,一棵节点维护位置,一棵权值, 每次从一棵树树上查询信息 ...

  7. [INS-32033] Central Inventory location is not writable

    这个是因为之前安装过一次图形界面,已经创建过Inventory,所以会报错. 解决:删除oraInventory这个目录.

  8. 办公利器!用Python批量识别发票并录入到Excel表格

    辰哥今天来分享一篇办公干货文章:用Python批量识别发票并录入到Excel表格.对于财务专业等学生或者公司财务人员来说,将报账发票等汇总到excel简直就是一个折磨. 尤其是到年底的时候,公司的财务 ...

  9. ES6学习笔记之 this 详解

    1.非箭头函数下的 this var obj = { x: 0, f1: function () { console.log(this.x); } } var f1 = obj.f1; var x = ...

  10. 如何在Linux下部署Samba服务?

    Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件 ...