POJ 3020 Antenna Placement 解题报告
题意就不说了,求二部图最大匹配。
问题是怎么建图……
给定的条件中,h<40,w<10,所以笔者直接默认所有情况的地图都是40*10,当然,超出范围的便是空城o。
然后给城市编号。一个城市只能和上下左右4个城市公用天线。换个换说就像国际象棋的棋盘一样,黑色格子与白色格子自然分成了二部图。黑色只能和白色匹配。
编号也很简单了。从第一行开始,第一格是黑色城市1,然后白色城市1,然后黑色城市2,白色城市2……因为所有的图都默认一样大小,所以编号可以重用。
为了方便知道(i,j)到底是黑色还是白色,我们可以用正数编号表示黑色,负数编号表示白色。
然后求最大匹配,直接匈牙利过去就好了。
贴代码,0MS
#include <cstdio>
#include <cstring> const int maxn=;
bool mp[maxn][maxn];
bool vis[maxn];
int link[maxn];
int No[][];
int n; bool DFS(int x)
{
for(int y=;y<=n;y++)
{
if(mp[x][y] && !vis[y])
{
vis[y]=true;
if(link[y]== || DFS(link[y]))
{
link[y]=x;
return true;
}
}
}
return false;
} int maxMartch()
{
int count=;
for(int x=;x<=n;x++)
{
memset(vis,,sizeof(vis));
if(DFS(x))
count++;
}
return count;
} int main()
{
int T;
scanf("%d",&T); int index=;
for(int i=;i<;i++)
for(int j=;j<;j++,index++)
No[i][j]=(index/)*((index+i)%?-:);
n=; while(T--)
{
int num=;
int w,h;
scanf("%d%d",&h,&w);
if(w%)
w++; char str[][];
memset(mp,,sizeof(mp));
memset(link,,sizeof(link));
memset(str,,sizeof(str));
for(int i=;i<h;i++)
{
scanf("%s",str[i&]);
if(str[i&][]=='*')
{
num++;
if(str[-i&][]=='*')
{
if(No[i][]>)
mp[No[i][]][-No[i-][]]=true;
else
mp[No[i-][]][-No[i][]]=true;
}
}
for(int j=; j<w; j++)
{
if(str[i&][j]=='*')
{
num++;
if(str[i&][j-]=='*')
{
if(No[i][j]>)
mp[No[i][j]][-No[i][j-]]=true;
else
mp[No[i][j-]][-No[i][j]]=true;
} if(str[-i&][j]=='*')
{
if(No[i][j]>)
mp[No[i][j]][-No[i-][j]]=true;
else
mp[No[i-][j]][-No[i][j]]=true;
}
}
}
}
printf("%d\n",num-maxMartch());
}
}
整个建图是自己想的,好像略似繁琐……不过还好,比赛的时候估计也能这么想到吧。
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 ...
- 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【二分匹配——最小路径覆盖】
链接: 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: 65536K Total Submissions: 5645 Accepted: 2825 Des ...
- poj 3020 Antenna Placement (最小路径覆盖)
链接:poj 3020 题意:一个矩形中,有n个城市'*'.'o'表示空地,如今这n个城市都要覆盖无线,若放置一个基站, 那么它至多能够覆盖本身和相邻的一个城市,求至少放置多少个基站才干使得全部的城市 ...
- POJ 3020 Antenna Placement 最大匹配
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6445 Accepted: 3182 ...
- poj 3020 Antenna Placement(二分无向图 匈牙利)
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6438 Accepted: 3176 ...
随机推荐
- WTL 中CComboBoxEx显示不了的问题
在使用WTL的CComboBoxEx时,InsertItem之后,运行程序,ComboBox显不了问题,其原因如下: I guess you want to place combo box to di ...
- python isinstance 判断各种类型的小细节
1. 基本语法 isinstance(object, classinfo) Return true if the object argument is an instance of the class ...
- iscsiadm用法简介
已知192.168.14.112节点,存在目标器 iqn.2015.06.cn.hrbyg.www.ygcs.c0a802b8:wzg,未设置CHAP,存在目标器 iqn.2015.06.cn.hrb ...
- memcached全面剖析--4
memcached的分布式算法 memcached的分布式 正如第1次中介绍的那样, memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能. 服务器端仅包括 第2次. 第 ...
- [C#]Array 添加扩展
众所周知,Array 一旦定义好,譬如四个长度,当需要再往里面添加元素的时候,需要Array.Resize一下才可以,为了提高代码复用,所以索性封装下,方便使用,代码如下: /// <summa ...
- MVC之重定向
MVC的重定向主要通过RedirectResult和RedirectToRouteResult实现.很显然,这两个对象都是MVC返回对象ActionResult的两个继承,具体原理不赘述. 这两个方法 ...
- Windows下使用cmd启动Oracle EM和sql命令使用+主机身份认证
(1)cmd命令下使用sql命令 >sqlplus / as sysdba sql>select * from v$version; (2)cmd命令下启动Oracle EM 安装完ora ...
- hadoop2.2.0+hive-0.10.0完全分布式安装方法
hadoop+hive-0.10.0完全分布式安装方法 1.jdk版本:jdk-7u60-linux-x64.tar.gz http://www.oracle.com/technetwork/cn/j ...
- myeclipse10.0优化
一.Myeclipse10修改字体 MyEclipse10是基于Eclipse3.7内核,但在Eclipse的Preferences-〉general-〉 Appearance->Colors ...
- 开发设计模式(六)多例模式(Multition Pattern)
多例模式实际上就是单例模式的扩充,多例模式又划分为有上限多例模式和无上限多例模式两种,有上限多例模式中的多例类的实例是有上限的,当这个多例类中的上限数值上等于 1 时,此时,多例类退化回到了单例类:而 ...