http://poj.org/problem?id=3020

题意:给定一个n*m的矩阵,'*'代表城市,现在想要用1*2的矩阵将所有的城市覆盖,问最少需要多少个矩阵?

分析:先为每个城市进行标号,再构建图,用匈牙利算法算出最大匹配。由于这里面用了双向边进行构图,所以最终所求答案为点集数-匹配数/2.

点集数-匹配数/2 = 点集数-匹配数/2*2+匹配数/2(单独的一个点的+匹配成功的点/2)

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include<vector>
#include<queue>
#include<algorithm> using namespace std;
typedef long long LL; const int maxn=;
const int INF=0x3f3f3f3f;
const int mod=;
int dir[][]={{,},{,},{-,},{,-}};
char maps[maxn][maxn];
int G[maxn][maxn],a[maxn][maxn], v[maxn], used[maxn];
int p, n, m; int Hungary(int x)
{
for(int i=; i<=p; i++)
{
if(!v[i] && G[x][i])
{
v[i]=;
if(!used[i] || Hungary(used[i]))
{
used[i] = x;
return ;
}
}
}
return ;
} int OK(int x, int y)
{
if(x>= && x<n && y>= &&y<m && maps[x][y]=='*')
return ;
return ;
} int main()
{
int T; scanf("%d", &T); while(T --)
{
scanf("%d %d", &n, &m); for(int i=; i<n; i++)
scanf("%s", maps[i]); memset(G, , sizeof(G));
memset(a, , sizeof(a)); p = ; for(int i=; i<n; i++)
{
for(int j=; j<m; j++)
{
if(maps[i][j]=='*')
a[i][j]=++p;
}
} for(int i=; i<n; i++)
{
for(int j=; j<m; j++)
{
if(maps[i][j]=='*')
{
for(int k=; k<; k++)
{
int nx = dir[k][]+i;
int ny = dir[k][]+j; if(OK(nx, ny))
{
G[a[i][j]][a[nx][ny]] = ;
G[a[nx][ny]][a[i][j]] = ;
}
}
}
}
} int ans = ;
memset(used, , sizeof(used));
for(int i=; i<=p; i++)
{
memset(v, , sizeof(v));
if(Hungary(i))
ans ++;
} printf("%d\n", p-ans/);
}
return ;
}

Antenna Placement poj 3020(匹配)的更多相关文章

  1. Antenna Placement poj 3020

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12104   Accepted: 595 ...

  2. Antenna Placement POJ - 3020 (最小边集覆盖)

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10699   Accepted: 526 ...

  3. (匹配 二维建图) Antenna Placement --POJ --3020

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

  4. (匹配)Antenna Placement --POJ --3020

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

  5. Antenna Placement POJ - 3020 二分图匹配 匈牙利 拆点建图 最小路径覆盖

    题意:图没什么用  给出一个地图 地图上有 点 一次可以覆盖2个连续 的点( 左右 或者 上下表示连续)问最少几条边可以使得每个点都被覆盖 最小路径覆盖       最小路径覆盖=|G|-最大匹配数 ...

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

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

  7. POJ3020:Antenna Placement(二分图匹配)

    Antnna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11093   Accepted: 5459 ...

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

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

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

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

随机推荐

  1. mysql优化思路

    /* mysql优化思路     1.数据库设计     2.sql语句优化     3.数据库参数设置     4.恰当的硬件资源和操作系统        数据库设计         数据的3NF( ...

  2. curl的POST与GET方法

      $url = '127.0.0.1/shang/bb.php';   $data = array('name'=>'赵猛','age'=>'23');   print_r(get($u ...

  3. Dockerfile指令

    指令的一般格式为INSTRUCTION arguments,指令包括FROM.MAINTAINER.RUN等. FROM 格式为FROM <image>或FROM <image> ...

  4. 为什么学习Ruby On Rails:

    简单总结了一下自己为什么喜欢ruby on rails: 语法简单,写代码很愉快,比较接近伪代码: 喜欢其强大的正则表达式和字符串操作. ruby中面向对象更自由,更动态: ruby给人信任,相信你了 ...

  5. ConfigParser.MissingSectionHeaderError: File contains no section headers.

    今天使用ConfigParser解析一个ini文件,报出如下错误: config.read(logFile) File "C:\Python26\lib\ConfigParser.py&qu ...

  6. 【javascript基础】5、创建对象

    前言 今天从家里回到了学校,在家呆了十天,胖了几斤的重量,又折腾回学校了,春节回家真是艰辛的路途.随便扯扯我的往返行程:为了省钱我没有选择直飞到长春往返都是到北京转的,这样我和女朋友可以节省4000块 ...

  7. centos 7 下安装Nginx

    下载Nginx wget nginx.tar.gz http://nginx.org/download/nginx-1.11.3.tar.gz 解压源码 .tar.gz 然后进入目录编译安装 cd n ...

  8. Error: Error #2014: Feature is not available at this time. at flash.filesystem::File$/initDocumentsDir()

    Error: Error #2014: Feature is not available at this time. at flash.filesystem::File$/initDocumentsD ...

  9. div背景图片叠加

    .box1{   width: 500px;   height: 500px;   background: url("")no-repeat,url("")no ...

  10. Windows Server 2003服务器无法下载.exe文件的解决方法

    今天架设了一台Windows Server 2003的网站服务器,发现打开网页后无法下载网站中的.exe文件,经过研究问题得以解决,拿来做个备忘. 解决方法非常简单,只需要在IIS中,将网站属性里的执 ...