Antenna Placement POJ - 3020 二分图匹配 匈牙利 拆点建图 最小路径覆盖
题意:图没什么用 给出一个地图 地图上有 点 一次可以覆盖2个连续 的点( 左右 或者 上下表示连续)问最少几条边可以使得每个点都被覆盖
最小路径覆盖 最小路径覆盖=|G|-最大匹配数 证明:https://blog.csdn.net/qq_34564984/article/details/52778763
证明总的来说就是尽可能多得连边 边越多 可以打包一起处理得点就越多(这里题中打包指连续得两个点只需要一条线段就能覆盖)
拆点思想 :匈牙利拆了点才好写 不然十分麻烦 简单地说就是点复制一遍 从一边开始匹配
建图:X如果需要覆盖 和它上下左右需要覆盖的点连边 当然这里是和拆完点的另外一个部分的点连边 amp[x][y]两维 分别表示两个集合
答案 最小路径覆盖 = 顶点数 – 最大二分匹配数/2 为什么要除以2呢,因为拆点复制了一遍 需要除回去 比如
1 2 有变 变成
1 和2'
2 和 1'形成了匹配 这样匹配就加倍了 所以除以2就好
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn=;
char mp[maxn][maxn];
int amp[maxn][maxn];
int vis[maxn];
int Hash[maxn][maxn];
int cnt=;
int ans=;
int link[maxn];
int dx[]={
,-,,
};
int dy[]={
,,-,
};
bool dfs(int x){
for(int i=;i<=cnt;i++){
if(amp[x][i]&&!vis[i]){
vis[i]=;
if(link[i]==||dfs(link[i])){
link[i]=x;
return ;
}
}
}
return ;
}
void solve(){
ans=;
memset(link,,sizeof(link));
for(int i=;i<=cnt;i++){
memset(vis,,sizeof(vis));
if(dfs(i))ans++;
}
}
int main(){
int t; cin>>t;
while(t--){
int n,m;
cnt=;
memset(amp,,sizeof(amp));
cin>>n>>m;
for(int i=;i<=n;i++)scanf("%s",mp[i]+);
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(mp[i][j]=='*') Hash[i][j]=++cnt;
}
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(mp[i][j]=='*'){
for(int k=;k<;k++){
int tx=i+dx[k],ty=j+dy[k];
if(mp[tx][ty]=='*')amp[Hash[i][j]][Hash[tx][ty]]=;
}
}
}
}
solve();
cout<<cnt-ans/<<endl;
} return ;
}
Antenna Placement POJ - 3020 二分图匹配 匈牙利 拆点建图 最小路径覆盖的更多相关文章
- (匹配   二维建图)  Antenna Placement --POJ --3020
		链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#probl ... 
- POJ 2594	Treasure Exploration(带交叉路的最小路径覆盖)
		题意: 派机器人去火星寻宝,给出一个无环的有向图,机器人可以降落在任何一个点上,再沿着路去其他点探索,我们的任务是计算至少派多少机器人就可以访问到所有的点.有的点可以重复去. 输入数据: 首先是n和 ... 
- Antenna Placement poj 3020
		Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12104 Accepted: 595 ... 
- Antenna Placement POJ - 3020 (最小边集覆盖)
		Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10699 Accepted: 526 ... 
- 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题  有向无环图最小路径覆盖  最大流  二分图匹配  匈牙利算法
		欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ... 
- Antenna Placement poj 3020(匹配)
		http://poj.org/problem?id=3020 题意:给定一个n*m的矩阵,'*'代表城市,现在想要用1*2的矩阵将所有的城市覆盖,问最少需要多少个矩阵? 分析:先为每个城市进行标号,再 ... 
- (匹配)Antenna Placement --POJ --3020
		链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#probl ... 
- hdu1151 二分图(无回路有向图)的最小路径覆盖  Air Raid
		欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ... 
- HDU 3861 The King’s Problem 最小路径覆盖(强连通分量缩点+二分图最大匹配)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3861 最小路径覆盖的一篇博客:https://blog.csdn.net/qq_39627843/ar ... 
随机推荐
- .net core jwt
			https://www.cnblogs.com/JacZhu/p/6837676.html 
- 简单的将Excel数据同步到SqlServer数据库中
			1.创建一个WinForm程序,添加一个Button控件 2.Button事件 private void button1_Click(object sender, EventArgs e) { Sys ... 
- Redux 入门教程(二):中间件与异步操作
			上一篇文章,介绍了 Redux 的基本做法:用户发出 Action,Reducer 函数算出新的 State,View 重新渲染. 但是,一个关键问题没有解决:异步操作怎么办?Action 发出以后, ... 
- Python—time模块介绍
			time 模块 在平常的代码中,我们常常需要与时间打交道.在Python中,常用的与时间处理有关的模块就包括:time,datetime,下面来介绍time模块. 在开始之前,首先要说明几点: 一.在 ... 
- React-Native之轮播组件looped-carousel的介绍与使用
			React-Native之轮播组件looped-carousel的介绍与使用 一,关于react-native轮播组件的介绍与对比 1,react-native-swiper在动态使用网页图片,多张图 ... 
- opencv2\core\cuda.hpp(106): error C2059: 语法错误:“常量”
			在 cuda.hpp 中, virtual void free(GpuMat* mat) = 0; -> virtual void _free(GpuMat* mat) = 0; 
- 对于vue和react“页面间”传递数据的理解误区
			前言 如果我们想要实现多个标签页之间的通信,可以使用localStorage.cookie等,但是能不能用vue或react呢? 结论 答案是NO,因为vue和react虽然可以在“多个”页面之间传递 ... 
- Java Serializable的使用和transient关键字使用小记(转载)
			一:Serializable 1.持久化的简单介绍: “持久化”意味着对象的“生存时间”并不取决于程序是否正在执行——它存在或“生存”于程序的每一次调用之间.通过序列化一个对象,将其写入磁盘,以后在程 ... 
- 使用Random类生成指定范围的随机数
			目的:要生成在[min,max]之间的随机整数 public class RandomTest { public static void main(String[] args) { ; ; Rando ... 
- [转帖]linux tree命令--显示目录的树形结构
			linux tree命令--显示目录的树形结构 版权声明:iamqilei@qq.com https://blog.csdn.net/u011729865/article/details/533 ... 
