poj 3020 Antenna Placement (最小路径覆盖)
题意:一个矩形中,有n个城市‘*’。‘o’表示空地,如今这n个城市都要覆盖无线,若放置一个基站,
那么它至多能够覆盖本身和相邻的一个城市,求至少放置多少个基站才干使得全部的城市都覆盖无线?
思路:求二分图的最小路径覆盖(无向图)
最小路径覆盖=点数-最大匹配数
注:由于为无向图,每一个顶点被算了两次,最大匹配为原本的两倍。
因此此时最小路径覆盖=点数-最大匹配数/2
#include<stdio.h>
#include<string.h>
int edge[450][450],num,used[510],link[510];
int x[4]={-1,1,0,0},y[4]={0,0,-1,1};
int dfs(int pos)
{
int i;
for(i=0;i<num;i++)
if(edge[pos][i]&&!used[i]){
used[i]=1;
if(link[i]==-1||dfs(link[i])){
link[i]=pos;
return 1;
}
}
return 0;
}
int main()
{
char s[45][15];
int n,m,i,j,k,sum,T,c,r,a[45][15];
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
num=0;
for(i=0;i<n;i++){
scanf("%s",s[i]);
for(j=0;j<m;j++)
if(s[i][j]=='*')
a[i][j]=num++; //将城市编号,并计算其总数
}
memset(edge,0,sizeof(edge));
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(s[i][j]=='*'){
for(k=0;k<4;k++){
r=i+x[k];
c=j+y[k];
if(r>=0&&r<n&&c>=0&&c<m&&s[r][c]=='*')
edge[a[i][j]][a[r][c]]=1; //将有关系的城市建边
}
}
sum=0;
memset(link,-1,sizeof(link));
for(i=0;i<num;i++){
memset(used,0,sizeof(used));
sum+=dfs(i);
}
sum=num-sum/2;
printf("%d\n",sum);
}
return 0;
}
poj 3020 Antenna Placement (最小路径覆盖)的更多相关文章
- 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement
题目传送门 /* 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 */ #include ...
- poj 3020 Antenna Placement(最小路径覆盖 + 构图)
http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Sub ...
- POJ 3020 Antenna Placement【二分匹配——最小路径覆盖】
链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- POJ 3020——Antenna Placement——————【 最小路径覆盖、奇偶性建图】
Antenna Placement Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u S ...
- poj 3020 Antenna Placement (最小路径覆盖)
二分图题目 当时看到网上有人的博客写着最小边覆盖,也有人写最小路径覆盖,我就有点方了,斌哥(kuangbin)的博客上只给了代码,没有解释,但是现在我还是明白了,这是个最小路径覆盖(因为我现在还不知道 ...
- POJ 3020 Antenna Placement (二分图最小路径覆盖)
<题目链接> 题目大意:一个矩形中,有N个城市’*’,现在这n个城市都要覆盖无线,每放置一个基站,至多可以覆盖相邻的两个城市.问至少放置多少个基站才能使得所有的城市都覆盖无线? 解题分析: ...
- 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 最大匹配
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6445 Accepted: 3182 ...
随机推荐
- Thinking in C++: 第1章 为什么C++会成功(改进了C的缺点,可复用C的知识与库,执行效率相当)
本文内容摘抄自C++经典书籍:<Thinking in C++> 操作概念:OOP程序像什么 我们已经知道,用C 语言编写的过程程序就是一些数据定义和函数调用.要理解这种程序的含义,程 ...
- Check .NET Version with Inno Setup
原文 http://www.kynosarges.org/DotNetVersion.html Inno Setup by Jordan Russell is a great installation ...
- kvm-GT
REF: http://los-vmm.sc.intel.com/wiki/How-to-setup-kvmgthttp://xenvgt.sh.intel.com/image/bdw-h/ Host ...
- 【JSP动态网站】JDBC连接SqlServer 2008数据库
JSP程序需要通过JDBC接口才能访问数据库. 启动MyEclipse,选择“Window”→“Open Perspective”→“MyEclipse Database Explorer”菜单项,打 ...
- 可执行文件(ELF)格式的理解
摘自http://www.cnblogs.com/xmphoenix/archive/2011/10/23/2221879.html 可执行文件(ELF)格式的理解 ELF(Executable an ...
- Number Sequence(kmp)
Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- linux下的DNS
Linux下设置DNS的位置主要是, 1网卡设置配置文件里面DNS服务器地址设置;2 hosts文件指定 3.系统默认DNS服务器地址设置/etc/resolv.conf文件修改 生效顺序是: 1 h ...
- (转)ASP.NET缓存概念及其应用浅析
ASP.NET缓存概念及其应用浅析 ASP.NET缓存是什么呢?ASP.NET缓存有什么样子的特点呢?本文就向你详细介绍ASP.NET缓存的相关情况. ASP.NET缓存概念是什么呢?通常,应用程序可 ...
- myeclipse中自己手动配置maven
第一步,配置myeclipse的jdk,因为myeclipse默认的是运行在jre之上,而maven是在jdk之上 第二步,配置maven:
- UVA 11212 Editing a Book
题意: 有一篇由n个自然段组成的文章.希望将他们排成递增序列.只能剪贴和粘贴交替进行,剪贴时可以剪贴一段连续的自然段. 分析: 用IDA*算法求解.当3*d+h>maxd时剪枝. 代码: #in ...