题目地址:http://poj.org/problem?id=3020

输入一个字符矩阵,'*'可行,'o'不可行。因为一个点可以和上下左右四个方向的一个可行点组成一个集合,所以对图进行黑白染色(每个点的值为其横纵坐标之和),然后就可划分为二分图,进行最大匹配。最后最大匹配数加剩下的单个点数量即为所求。

 #include<cstdio>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stdbool.h>
#include<time.h>
#include<stdlib.h>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<vector>
using namespace std;
#define clr(x,y) memset(x,y,sizeof(x))
#define sqr(x) ((x)*(x))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define LL long long
#define INF 0x3f3f3f3f
#define A first
#define B second
#define PI acos(-1.0)
const int N=+;
const int dx[]={,,-,};
const int dy[]={,-,,};
int n,m,k,num,k1,k2,f[N],g[N][N],link[N],flag[N][N],b[N],c[N];
char a[N][N]; void init()
{
clr(f,);
clr(g,);
clr(link,-);
clr(flag,);
clr(b,);
clr(c,);
num=;
k1=;
k2=;
} bool find(int x)
{
for(int i=;i<k2;i++) {
if(!f[c[i]] && g[x][c[i]]) {
f[c[i]]=;
if(link[c[i]]==- || find(link[c[i]])) {
link[c[i]]=x;
return true;
}
}
} return false;
} int hungary()
{
int ans=;
for(int i=;i<k1;i++) {
clr(f,);
if(find(b[i])) ans++;
} return ans;
} int main()
{
int u,v,cas; scanf("%d",&cas);
while(cas--) {
init();
scanf("%d%d",&m,&n);
for(int i=;i<=m;i++) {
scanf("%s",a[i]+);
for(int j=;j<=n;j++) {
if(a[i][j]=='*') {
flag[i][j]=;
num++;
}
}
} for(int i=;i<=m;i++) {
for(int j=;j<=n;j++){
int p=(i-)*n+j;
if((i+j)&) {
if(flag[i][j]) b[k1++]=p;
} else {
if(flag[i][j]) c[k2++]=p;
}
}
} for(int i=;i<=m;i++) {
for(int j=;j<=n;j++) {
if(flag[i][j]) {
for(int k=;k<;k++) {
int nx=i+dx[k];
int ny=j+dy[k];
if(flag[nx][ny]) {
u=(i-)*n+j;
v=(nx-)*n+ny;
g[u][v]=;
}
}
}
}
} int ans=hungary();
printf("%d\n",ans+num-*ans); } return ;
}

[POJ] 3020 Antenna Placement(二分图最大匹配)的更多相关文章

  1. POJ - 3020  Antenna Placement 二分图最大匹配

    http://poj.org/problem?id=3020 首先注意到,答案的最大值是'*'的个数,也就是相当于我每用一次那个技能,我只套一个'*',是等价的. 所以,每结合一对**,则可以减少一次 ...

  2. POJ 3020 Antenna Placement(二分图 匈牙利算法)

    题目网址:  http://poj.org/problem?id=3020 题意: 用椭圆形去覆盖给出所有环(即图上的小圆点),有两种类型的椭圆形,左右朝向和上下朝向的,一个椭圆形最多可以覆盖相邻的两 ...

  3. POJ 3020 Antenna Placement (二分图最小路径覆盖)

    <题目链接> 题目大意:一个矩形中,有N个城市’*’,现在这n个城市都要覆盖无线,每放置一个基站,至多可以覆盖相邻的两个城市.问至少放置多少个基站才能使得所有的城市都覆盖无线? 解题分析: ...

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

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

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

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

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

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

  7. POJ 3020 Antenna Placement 最大匹配

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

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

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

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

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

随机推荐

  1. UVA10557- XYZZY(spfa+设置次数上限)

    题意:有N个房间,刚开始你位于1号房间,有100的能量值,你要到达N号房间,每两个房间之间有单向门相连接,你到达某个房间可以加上该房间的能量值, 如果你在未到达N号房间之前能量值耗尽,则死亡,否则胜利 ...

  2. cloudCompute

    云计算使企业可以迅速对市场做出反应而且加强了企业内部的协同 人人都在用云计算的时候能够迅速迁移到云平台已经不叫优势了,反而不使用云计算成为了一种劣势

  3. 解决nginx session共享的问题

    不使用session,换作cookie 能把session改成cookie,就能避开session的一些弊端,在从前看的一本J2EE的书上,也指明在集群系统中不能用session,否则惹出祸端来就不好 ...

  4. ObjectContext

    ObjectContext 类 提供用于查询和使用对象形式的实体数据的功能.它封装了与数据库的底层连接,使你能执行对象查询. ObjectContext封装 .NET Framework 和数据库之间 ...

  5. JavaScript 构造函数

    关于JavaScript构造函数,如今出现了很多JavaScript的框架,例如jQuery.Ext等等这些,这些将JavaScript作为一种面向对象的语言进行编程,那么JavaScript到底是怎 ...

  6. [RxJS] Creation operators: interval and timer

    It is quite common to need an Observable that ticks periodically, for instance every second or every ...

  7. android PreferenceScreen使用笔记

    preference.xml <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen ...

  8. Unix系统解压tar包时出现@LongLink错误

    Unix系统上使用tar命令解压tar包后,多了一个@LongLink的文件,并且原来的tar包解压后不完整.网上查了下,原因是AIX系统上tar命令自身的一个缺陷.解决办法:把该tar包上传到lin ...

  9. 向量的叉积 POJ 2318 TOYS & POJ 2398 Toy Storage

    POJ 2318: 题目大意:给定一个盒子的左上角和右下角坐标,然后给n条线,可以将盒子分成n+1个部分,再给m个点,问每个区域内有多少各点 这个题用到关键的一步就是向量的叉积,假设一个点m在 由ab ...

  10. mongodb入门教程二

    title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...