poj 3020 Antenna Placement(二分图最大匹配)
题意:
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(二分图最大匹配)相关推荐
- 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement
题目传送门 1 /* 2 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 3 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 4 */ 5 ...
- POJ - 3020 Antenna Placement(最小路径覆盖-二分图最大匹配)
题目链接:点击查看 题目大意:给出一个n*m的地图,图中'o'代表空地,'*'代表城市,现在需要给城市装无线网,每个无线网最多可以覆盖相邻的两个城市,问覆盖所有的城市最少需要装多少个无线网 题目分析: ...
- POJ 3020 Antenna Placement
解题思路:求解最大独立集,转而求解最小顶点覆盖->最大流问题 #include <iostream> using namespace std; int t; int father[4 ...
- pku 3020 Antenna Placement
http://poj.org/problem?id=3020 求最小路径覆盖问题 ,对于有向图最小路径覆盖 = 一边的点数 (x集或y集)- 最大匹配 无向图最小路径覆盖 = 一边的点数 (x集或y集 ...
- POJ - 3614 Sunscreen(贪心/二分图最大匹配-多重匹配/网络流-最大流)
题目链接:点击查看 题目大意:给出n头奶牛,奶牛们现在要晒太阳,每头奶牛需要[l,r]区间内的光照强度,现在有m种防晒霜,每种防晒霜可以让奶牛接受到val数值的光照强度,然后每种防晒霜只有num个,现 ...
- POJ - 1358 Housing Complexes(二分图最大匹配)
题目链接:点击查看 题目大意:给出k块m*n大小的土地,每块土地由数字'0'或26个大写字母组成,大写字母代表住户,数字'0'代表空地,现在开发商想尽可能多的修建大楼,每个大楼需要占用h*w的面积,而 ...
- 解题报告 (九) 二分图最大匹配
文章目录 二分图最大匹配 解题报告 一.最大匹配模板题 HDU 1083 Courses HDU 2063 过山车 HDU 1528 Card Game Cheater HDU 1179 Olliva ...
- POJ - 2226 Muddy Fields(最小点覆盖-二分图最大匹配)
题目链接:点击查看 题目大意:给出一个n*m的地图,地图中'*'代表泥地,'.'代表空地,现在我们有两种木板,一种可以覆盖一行中的任意长度,我们成为行木板,另一种可以覆盖一列中的任意长度,我们成为列木 ...
- 图论总结(一)二分图最大匹配
二分图最大匹配 (一).二分图 1.定义 2.性质 3.判定 (二).二分图的匹配 1.二分图的最大匹配 2. König定理及其证明 3.最小边覆盖与最大独立集 (三).增广路径 1.定义 2.性质 ...
最新文章
- Spring Security 实战干货: RBAC权限控制概念的理解
- 【死磕Sharding-jdbc】—–最大努力型事务
- 面向对象PHP之静态延迟绑定
- WEB前端面试题 分别使用2个、3个、5个DIV画出一个大的红十字
- 限制tomcat带宽_必看的Tomcat性能优化
- SpringBootApplication注解
- 什么是 SAP SUP - Sybase Unwired Platform
- webpack自定义打包命令
- python零基础能学吗-python 零基础该怎么学?
- 计算机字长与下列哪项指标密切相关,组成原理与汇编语言-中国大学mooc-题库零氪...
- MybatisPlusExcepection: can not find lambda cache for this property [XX] for entity [xxx]
- testbench学习笔记(转载)
- Android apk下载与安装
- LCD驱动(FrameBuffer)实例开发讲解
- Python中文文本分句 sentence tokenize
- python删除指定元素 多个_Python List remove()删除多个元素
- error c2678解决方法
- AI拟声: 5秒内克隆您的声音并生成任意语音内容
- date_sub的用法
- 【实操】创建云监控报警规则