POJ 3020 Antenna Placement (二分图最小路径覆盖)
<题目链接>
题目大意:
一个矩形中,有N个城市’*’,现在这n个城市都要覆盖无线,每放置一个基站,至多可以覆盖相邻的两个城市。问至少放置多少个基站才能使得所有的城市都覆盖无线?
解题分析:
将这n个城市看成二分图中的点集,基站匹配的圆圈看成两个点集之间的连线,要使圆圈圈住所有的点,即该二分图中所有的点都必须有线连接,并且使连接的线段条数最少。自然而然,本题就转化为了二分图的最小路径覆盖问题,用最少的边数,去覆盖所有的点。
二分图的最小路径覆盖 = 顶点数 – 最大匹配数(因为本题是无向的,所以最大匹配数为算出的结果/2)
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int h,w,vN,vM; ][]; ][],vis[],match[],cnt[][]; bool dfs(int x){ ;i<=vM;i++){ if(g[x][i]&&!vis[i]){ vis[i]=; ||dfs(match[i])){ match[i]=x; return true; } } } return false; } int Hungary(){ ; memset(match,-,sizeof(match)); ;i<=vN;i++){ memset(vis,,sizeof(vis)); if(dfs(i))res++; } return res; } int main(){ int T;scanf("%d",&T); while(T--){ scanf("%d%d",&h,&w); ; ;i<=h;i++){ scanf(); ;j<=w;j++) if(mpa[i][j]=='*')cnt[i][j]=++pos; } //与周围四个方向的'*'建立匹配关系 memset(g,,sizeof(g)); ;i<=h;i++){ ;j<=w;j++){ if(mpa[i][j]!='*')continue; >=&&mpa[i-][j]==][j]]=; >=&&mpa[i][j-]==]]=; <=h&&mpa[i+][j]==][j]]=; <=w&&mpa[i][j+]==]]=; } } vN=vM=pos; int ans=Hungary(); printf(); //ans/2为最大匹配数,pos-ans/2为最小路径覆盖数 } }
2018-11-14
POJ 3020 Antenna Placement (二分图最小路径覆盖)的更多相关文章
- poj 3020 Antenna Placement(最小路径覆盖 + 构图)
http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- POJ 3020——Antenna Placement——————【 最小路径覆盖、奇偶性建图】
Antenna Placement Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u S ...
- poj 3020 Antenna Placement (最小路径覆盖)
二分图题目 当时看到网上有人的博客写着最小边覆盖,也有人写最小路径覆盖,我就有点方了,斌哥(kuangbin)的博客上只给了代码,没有解释,但是现在我还是明白了,这是个最小路径覆盖(因为我现在还不知道 ...
- POJ3020 Antenna Placement(二分图最小路径覆盖)
The Global Aerial Research Centre has been allotted the task of building the fifth generation of mob ...
- POJ 3020 Antenna Placement 【最小边覆盖】
传送门:http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total ...
- POJ - 3020 Antenna Placement(最小覆盖路径)
---恢复内容开始--- https://vjudge.net/problem/POJ-3020 题意 *--代表城市,o--代表空地 给城市安装无线网,一个无线网最多可以覆盖两座城市,问覆盖所有城市 ...
- POJ 3020 Antenna Placement(二分图 匈牙利算法)
题目网址: http://poj.org/problem?id=3020 题意: 用椭圆形去覆盖给出所有环(即图上的小圆点),有两种类型的椭圆形,左右朝向和上下朝向的,一个椭圆形最多可以覆盖相邻的两 ...
- [POJ] 3020 Antenna Placement(二分图最大匹配)
题目地址:http://poj.org/problem?id=3020 输入一个字符矩阵,'*'可行,'o'不可行.因为一个点可以和上下左右四个方向的一个可行点组成一个集合,所以对图进行黑白染色(每个 ...
- POJ - 3020 Antenna Placement 二分图最大匹配
http://poj.org/problem?id=3020 首先注意到,答案的最大值是'*'的个数,也就是相当于我每用一次那个技能,我只套一个'*',是等价的. 所以,每结合一对**,则可以减少一次 ...
随机推荐
- ssh 登录报错 packet_write_wait: Connection to x.x.x.x port 22: Broken pipe
问题 更新个人博客文章时遇到:Error: packet_write_wait: Connection to 192.30.253.113 port 22: Broken pipe packet_wr ...
- windows+mysql集群搭建-三分钟搞定集群
注:本文来源: 陈晓婵 < windows+mysql集群搭建-三分钟搞定集群 > 一:mysql集群搭建教程-基础篇 计算机一级考试系统要用集群,目标是把集群搭建起来,保证一 ...
- leetcode(js)算法之17电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母 示例: 输入:"23" 输出:[" ...
- cf1110d 线性dp
很精练的一道题 /* dp[i][j][k]表示值i作为最大值结束的边剩k条,i-1剩下j条的情况的结果 dp[i][k][l]是由dp[i-1][j][k]的j决定的,因为k+l是被留下给后面用的, ...
- 把tomcat服务器配置为windows服务的方法
转自:http://ykyfendou.iteye.com/blog/2032916 使用tomcat开发的项目,我们把项目交付给客户的时候,客户都不希望在每次开机的时候都要启动一下tomcat服务器 ...
- DoNetZip类库解压和压缩文件
using Ionic.Zip; public class ZipHelper { public static void ZipSingleFile(string zipPath) { try { u ...
- python:字符串转换成字节的三种方式及字符转码问题
str='zifuchuang' 第一种 b'zifuchuang'第二种bytes('zifuchuang',encoding='utf-8')第三种('zifuchuang').encode('u ...
- python pip install mysql-python报错
报错: 下载地址: https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python
- MyBatis-Plus工具快速入门
MyBatis-Plus官方文档:http://mp.baomidou.com/#/quick-starthttp://mp.baomidou.com/guide/#%E7%89%B9%E6%80%A ...
- sinoces 2013 消费电子
转眼距离上次看消费电子(http://www.cnblogs.com/sun8134/archive/2012/07/08/2581997.html)又过了一年 也到了今年的消费电子展… 结果一天小雨 ...