题意:

N行M列的矩阵,每个格子里不是 * 就是 O 。

* :是一个利益点。

O:是一个空白点。

每次可以用一个圈覆盖相邻的两个*。(左右相邻或上下相邻)。

问最少需要多少个圈可以覆盖所有的*。

思路:

把每个格子变成一个数,总共有N*M个数。构造二分图,左右的数字都分别是1....N*M。

若两个*可以被一个圈覆盖,则将它们对应在左边、右边的点连上线。

答案即为:*的总数 - 最大二分匹配的值/2(因为有一半是对称的)。

代码:

int T,n,m;
vector<int> graph[405];
bool bmask[405];
int cx[405],cy[405];
char s[45][15];int findPath(int u){int L=graph[u].size();rep(i,0,L-1){int v=graph[u][i];if(!bmask[v]){bmask[v]=true;if(cy[v]==-1||findPath(cy[v])){cy[v]=u;cx[u]=v;return 1;}}}return 0;
}
int MaxMatch(){int ans=0;rep(i,1,n*m) cx[i]=cy[i]=-1;rep(i,1,n*m) if(cx[i]==-1){mem(bmask,false);ans+=findPath(i);}return ans;
}int main(){cin>>T;while(T--){scanf("%d%d",&n,&m);rep(i,1,n*m) graph[i].clear();int cc=0;rep(i,1,n) scanf("%s",s[i]);rep(i,1,n){rep(j,0,m-1) if(s[i][j]=='*'){int num=m*(i-1)+j+1;int u=i, v=j+1;if(v-1>=1 && s[u][j-1]=='*') graph[num].push_back(num-1);if(v+1<=m && s[u][j+1]=='*') graph[num].push_back(num+1);if(u-1>=1 && s[u-1][j]=='*') graph[num].push_back(num-m);if(u+1<=n && s[u+1][j]=='*') graph[num].push_back(num+m);++cc;}}int dd=MaxMatch();printf("%d\n",cc-dd/2);}
}

转载于:https://www.cnblogs.com/fish7/p/4088519.html

poj 3020 Antenna Placement(二分图最大匹配)相关推荐

  1. 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement

    题目传送门 1 /* 2 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 3 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 4 */ 5 ...

  2. POJ - 3020 Antenna Placement(最小路径覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个n*m的地图,图中'o'代表空地,'*'代表城市,现在需要给城市装无线网,每个无线网最多可以覆盖相邻的两个城市,问覆盖所有的城市最少需要装多少个无线网 题目分析: ...

  3. POJ 3020 Antenna Placement

    解题思路:求解最大独立集,转而求解最小顶点覆盖->最大流问题 #include <iostream> using namespace std; int t; int father[4 ...

  4. pku 3020 Antenna Placement

    http://poj.org/problem?id=3020 求最小路径覆盖问题 ,对于有向图最小路径覆盖 = 一边的点数 (x集或y集)- 最大匹配 无向图最小路径覆盖 = 一边的点数 (x集或y集 ...

  5. POJ - 3614 Sunscreen(贪心/二分图最大匹配-多重匹配/网络流-最大流)

    题目链接:点击查看 题目大意:给出n头奶牛,奶牛们现在要晒太阳,每头奶牛需要[l,r]区间内的光照强度,现在有m种防晒霜,每种防晒霜可以让奶牛接受到val数值的光照强度,然后每种防晒霜只有num个,现 ...

  6. POJ - 1358 Housing Complexes(二分图最大匹配)

    题目链接:点击查看 题目大意:给出k块m*n大小的土地,每块土地由数字'0'或26个大写字母组成,大写字母代表住户,数字'0'代表空地,现在开发商想尽可能多的修建大楼,每个大楼需要占用h*w的面积,而 ...

  7. 解题报告 (九) 二分图最大匹配

    文章目录 二分图最大匹配 解题报告 一.最大匹配模板题 HDU 1083 Courses HDU 2063 过山车 HDU 1528 Card Game Cheater HDU 1179 Olliva ...

  8. POJ - 2226 Muddy Fields(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个n*m的地图,地图中'*'代表泥地,'.'代表空地,现在我们有两种木板,一种可以覆盖一行中的任意长度,我们成为行木板,另一种可以覆盖一列中的任意长度,我们成为列木 ...

  9. 图论总结(一)二分图最大匹配

    二分图最大匹配 (一).二分图 1.定义 2.性质 3.判定 (二).二分图的匹配 1.二分图的最大匹配 2. König定理及其证明 3.最小边覆盖与最大独立集 (三).增广路径 1.定义 2.性质 ...

最新文章

  1. Spring Security 实战干货: RBAC权限控制概念的理解
  2. 【死磕Sharding-jdbc】—–最大努力型事务
  3. 面向对象PHP之静态延迟绑定
  4. WEB前端面试题 分别使用2个、3个、5个DIV画出一个大的红十字
  5. 限制tomcat带宽_必看的Tomcat性能优化
  6. SpringBootApplication注解
  7. 什么是 SAP SUP - Sybase Unwired Platform
  8. webpack自定义打包命令
  9. python零基础能学吗-python 零基础该怎么学?
  10. 计算机字长与下列哪项指标密切相关,组成原理与汇编语言-中国大学mooc-题库零氪...
  11. MybatisPlusExcepection: can not find lambda cache for this property [XX] for entity [xxx]
  12. testbench学习笔记(转载)
  13. Android apk下载与安装
  14. LCD驱动(FrameBuffer)实例开发讲解
  15. Python中文文本分句 sentence tokenize
  16. python删除指定元素 多个_Python List remove()删除多个元素
  17. error c2678解决方法
  18. AI拟声: 5秒内克隆您的声音并生成任意语音内容
  19. date_sub的用法
  20. 【实操】创建云监控报警规则

热门文章

  1. flipdim--按指定维数翻转矩阵
  2. Sparsity稀疏编码(三)
  3. 判断三维坐标系旋转正方向的简单方法
  4. 如何给一个空白磁盘安装操作系统
  5. 离散对数(同余理论-BSGS算法)
  6. Matlab中基本统计量的函数
  7. [转载]判断IE浏览器-世界上最短的代码
  8. [Java]list集合为空或为null的区别
  9. 修改Tomcat可支持get传参方式的url长度,get形式
  10. 机电传动控制第三次作业