思路:

---说给自己

一开始想的是从1-h*w标记整幅图,建图是星号和 {他,与他相连的星号} 建边,肯定要去匹配"*"啊,所以空格一定不会去造,然后就理解成了最小点覆盖,然而对于最小点覆盖,对于 孤立点(也就是没有连出去的边) ,这样就错了。。。但是对于这个思路还是打完了,然后发现错了。。。其实对于“正确”思路要先想想是嘛。。。

---正解

这题题意是一个圈最多只能圈两个" * ",那么完全可以理解一个圈就是一条线,连了两个星号,那么直接星号和星号建边,记得建双向。求一个最小路径覆盖,这里因为是双向路径多了一倍,answer=num-path_num/2;

贴一发挫代码;

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <queue>
  6. #include <math.h>
  7. #include <map>
  8. #include <queue>
  9. #include <stack>
  10. #include <algorithm>
  11. using namespace std;
  12. #define INF 0x3f3f3f
  13. #define pi acos(-1.0)
  14. #define LL long long
  15.  
  16. int ma[1010][1010];
  17. int cx[1010],cy[1010];
  18. int vis[1010];
  19. int dx[4]={0,0,-1,1};
  20. int dy[4]={-1,1,0,0};
  21. int id_num[45][15];
  22. char s[45][15];
  23. int n,m;
  24. int num;
  25.  
  26. void init()
  27. {
  28. memset(ma,0,sizeof(ma));
  29. num=0;
  30. for(int i=0;i<n;i++)
  31. for(int j=0;j<m;j++)
  32. {
  33. if(s[i][j]=='o')
  34. continue;
  35. id_num[i][j]=++num;
  36. }
  37. }
  38.  
  39. void pre_solve()
  40. {
  41. int u,v;
  42. for(int i=0;i<n;i++)
  43. for(int j=0;j<m;j++)
  44. {
  45. if(s[i][j]=='o')
  46. continue;
  47. u=id_num[i][j];
  48. for(int k=0;k<4;k++)
  49. {
  50. int x=dx[k]+i;
  51. int y=dy[k]+j;
  52. if(x<0||y<0||x>=n||y>=m||s[x][y]=='o')
  53. continue;
  54. v=id_num[x][y];
  55. ma[u][v]=1;
  56. }
  57. }
  58. }
  59.  
  60. int find_path(int u)
  61. {
  62. for(int i=1; i<=num; i++)
  63. {
  64. if(!vis[i]&&ma[u][i])
  65. {
  66. vis[i]=1;
  67. if(cy[i]==-1||find_path(cy[i]))
  68. {
  69. cy[i]=u;
  70. return 1;
  71. }
  72. }
  73. }
  74. return 0;
  75. }
  76.  
  77. int solve()
  78. {
  79. int ans=0;
  80. memset(cy,-1,sizeof(cy));
  81. for(int i=1; i<=num; i++)
  82. {
  83. memset(vis,0,sizeof(vis));
  84. if(find_path(i))
  85. ans++;
  86. }
  87. return ans;
  88. }
  89.  
  90. int main()
  91. {
  92. int t;
  93. scanf("%d",&t);
  94. while(t--)
  95. {
  96. scanf("%d%d",&n,&m);
  97. for(int i=0;i<n;i++)
  98. scanf("%s",s[i]);
  99. init();
  100. pre_solve();
  101. printf("%d\n",num-solve()/2);
  102. }
  103. return 0;
  104. }

POJ3020【二分匹配】的更多相关文章

  1. POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24081   Accepted: 106 ...

  2. [kuangbin带你飞]专题十 匹配问题 二分匹配部分

    刚回到家 开了二分匹配专题 手握xyl模板 奋力写写写 终于写完了一群模板题 A hdu1045 对这个图进行 行列的重写 给每个位置赋予新的行列 使不能相互打到的位置 拥有不同的行与列 然后左行右列 ...

  3. BZOJ 1189 二分匹配 || 最大流

    1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1155  Solved: 420[Submi ...

  4. Kingdom of Obsession---hdu5943(二分匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:给你两个数n, s 然后让你判断是否存在(s+1, s+2, s+3, ... , s+n ...

  5. poj 2060 Taxi Cab Scheme (二分匹配)

    Taxi Cab Scheme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 5710   Accepted: 2393 D ...

  6. [ACM_图论] Sorting Slides(挑选幻灯片,二分匹配,中等)

    Description Professor Clumsey is going to give an important talk this afternoon. Unfortunately, he i ...

  7. [ACM_图论] The Perfect Stall 完美的牛栏(匈牙利算法、最大二分匹配)

    描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在她们 ...

  8. nyoj 237 游戏高手的烦恼 二分匹配--最小点覆盖

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=237 二分匹配--最小点覆盖模板题 Tips:用邻接矩阵超时,用数组模拟邻接表WA,暂时只 ...

  9. UVA5874 Social Holidaying 二分匹配

    二分匹配简单题,看懂题意,建图比较重要. #include<stdio.h> #include<string.h> #define maxn 1100 int map[maxn ...

  10. HDU 2236:无题II(二分搜索+二分匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=2236 题意:中文题意. 思路:先找出最大和最小值,然后二分差值,对于每一个差值从下界开始枚举判断能不能二分匹配. ...

随机推荐

  1. 优化梯度计算的改进的HS光流算法

    前言 在经典HS光流算法中,图像中两点间的灰度变化被假定为线性的,但实际上灰度变化是非线性的.本文详细分析了灰度估计不准确造成的偏差并提出了一种改进HS光流算法,这种算法可以得到较好的计算结果,并能明 ...

  2. EasyDarwin Streaming Server对Task的调用方法

    我们在EasyDarwin流媒体服务器的二次开发过程中,经常会需要定义自己的Task类,例如在EasyDarwin中,RTSPSessioin.HTTPSession.RTCPTask等,都是Task ...

  3. 2018-11-9-匿名函数&递归函数初识

    1.匿名函数(lambda) 2.递归函数初识

  4. moving from a host-centric infrastructure to a container-centric infrastructure

    https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/ Why do I need Kubernetes and what c ...

  5. mybatis入门(十)

    mybatis和hibernate本质区别和应用场景 hibernate:是一个标准ORM框架(对象关系映射).入门门槛较高的,不需要程序写sql,sql语句自动生成了. 对sql语句进行优化.修改比 ...

  6. swift-ios开发pod的使用(1)

    MAC安裝CocoaPods   http://www.cnblogs.com/surge/p/4436360.html 请注意我的环境,这个很重要 xcode版本7.3.2   mac 版本OS X ...

  7. java之EJB

    EjB,只是一个服务端运行组件,公开接口供客户端以C/S方式调用而已. 最直白,最本质的解释,可参见: http://blog.csdn.net/jojo52013145/article/detail ...

  8. 使用dbms_stats.gather_table_stats调整表的统计信息

    创建实验表,插入10万行数据 SQL> create table test (id number,name varchar2(10)); Table created. SQL> decla ...

  9. 安装截图工具 Shutter【转】

    本文转载自:http://blog.csdn.net/hanshileiai/article/details/46843713 一.安装截图工具 Shutter 1. 添加安装包软件源 sudo ad ...

  10. javascript学习的思维导图

    今天逛师父的博客园,发现了好东西~~~~我给偷过来了~~~那就是javascript学习的思维导图,比自己整理更快速. 思维导图小tips: 思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ...