题意就不说了,求二部图最大匹配。

问题是怎么建图……

给定的条件中,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 解题报告的更多相关文章

  1. 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement

    题目传送门 /* 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 */ #include ...

  2. POJ 3020 Antenna Placement 【最小边覆盖】

    传送门:http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total ...

  3. poj 3020 Antenna Placement(最小路径覆盖 + 构图)

    http://poj.org/problem?id=3020 Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Sub ...

  4. POJ 3020——Antenna Placement——————【 最小路径覆盖、奇偶性建图】

    Antenna Placement Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u S ...

  5. POJ 3020 Antenna Placement【二分匹配——最小路径覆盖】

    链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

  6. POJ 3020 Antenna Placement

    Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5645 Accepted: 2825 Des ...

  7. poj 3020 Antenna Placement (最小路径覆盖)

    链接:poj 3020 题意:一个矩形中,有n个城市'*'.'o'表示空地,如今这n个城市都要覆盖无线,若放置一个基站, 那么它至多能够覆盖本身和相邻的一个城市,求至少放置多少个基站才干使得全部的城市 ...

  8. POJ 3020 Antenna Placement 最大匹配

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6445   Accepted: 3182 ...

  9. poj 3020 Antenna Placement(二分无向图 匈牙利)

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6438   Accepted: 3176 ...

随机推荐

  1. OpenJudge/Poj 1915 Knight Moves

    1.链接地址: http://bailian.openjudge.cn/practice/1915 http://poj.org/problem?id=1915 2.题目: 总Time Limit: ...

  2. Hibernate3.3 小记

    //----------------事务(修改.删除.保存) Session s=getSession(); Transaction t=s.beginTransaction(); getSessio ...

  3. HTML5之地理信息应用 获取自己的位置

    上代码: window.onload = function() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosit ...

  4. windows phone 操作 http异步返回结果

    wp中为了提升用户体验,砍掉了http的同步操作,仅支持http异步请求,那么该如何及时处理异步操作返回的结果.纠结了很久,终于在技术群中好友的帮助下解决了问题,借助事件,将异步编程模型模式简单的处理 ...

  5. Chrome控制台函数

    你是光你是电,你是唯一的神话. Chrome的出现简直拯救了广大前端,不仅仅是因为其V8引擎的速度,更是因为其强大的控制台.为调试前端提供了强大的武器. 当然Firefox下的firebug也很强大, ...

  6. hggroup和adress

    hggroup通常放在标签内部,不过不做强制要求! ​adress 通常用于作者的联系信息.比如名字,Email,电话,地址.标签内字体显示斜体. ​ 与 标签的比较:比div简洁,更少的用到id或c ...

  7. 2016032901 - ubuntu安装jdk

    在ubuntu上安装jdk,然后网上大部分相同的教程配置,结果运行java,javac,java -version总是出现莫名奇妙的问题. 原先配置完之后,运行java -version后出现下面内容 ...

  8. ExtJS4加载FormPanel数据的几种方式

    我们做web应用最多的就是处理表单,extjs为我们提供了很多处理表单的功能,很多初学者疑惑怎么加载表单数据,到底能用什么方式加载?本文中,我将我自己实验过的进行一下总结,自己备忘,也希望能帮助到其他 ...

  9. Python创建list

    Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ['Mic ...

  10. 74HC595

    74HC595 输入:串行输入 输出:并行/串行输出 用74HC595做一个流水灯 电路图 程序 /*====================== 测试74HC595 ================ ...