Antenna Placement(匈牙利算法 ,最少路径覆盖)
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 6991 | Accepted: 3466 |
Description
Obviously, it is desirable to use as few antennas as possible, but still provide coverage for each place of interest. We model the problem as follows: Let A be a rectangular matrix describing the surface of Sweden, where an entry of A either is a point of interest, which must be covered by at least one antenna, or empty space. Antennas can only be positioned at an entry in A. When an antenna is placed at row r and column c, this entry is considered covered, but also one of the neighbouring entries (c+1,r),(c,r+1),(c-1,r), or (c,r-1), is covered depending on the type chosen for this particular antenna. What is the least number of antennas for which there exists a placement in A such that all points of interest are covered?
Input
Output
Sample Input
2
7 9
ooo**oooo
**oo*ooo*
o*oo**o**
ooooooooo
*******oo
o*o*oo*oo
*******oo
10 1
*
*
*
o
*
*
*
*
*
*
Sample Output
17
5
Source
#include<stdio.h>
#include<iostream>
#include<queue>
#include<string.h>
using namespace std;
bool map[][] ;
int vis[][] ;
int a[][] ;
int girl [] ;
bool sta[] ;
int cnt ;
int row , col ;
char st[] ;
int move[][] = { , , , , - , , , -} ; bool hungary (int x)
{
for (int i = ; i <= cnt ; i++) {
if (map[x][i] && sta[i] == false) {
sta[i] = true ;
if (girl[i] == || hungary (girl[i])) {
girl[i] = x ;
return true ;
}
}
}
return false ;
} int main ()
{
// freopen ("a.txt" , "r" , stdin) ;
int T ;
cin >> T ;
while (T--) {
scanf ("%d%d" , &row , &col) ;
getchar () ;
cnt = ;
memset (vis , - , sizeof(vis)) ;
memset (map , , sizeof(map)) ;
memset (a , - , sizeof(a)) ;
memset (girl , , sizeof(girl)) ;
for (int i = ; i < row ; i++) {
gets (st) ;
for (int j = ; j < col ; j++) {
if (st[j] == '*') {
a[i + ][j + ] = + cnt++;
}
}
}
/* for (int i = 1 ; i <= row ; i++) {
for (int j = 1 ; j <= col ; j++) {
printf ("%d " , a[i][j]);
}
puts ("") ;
}*/
for (int i = ; i <= row ; i++) {
for (int j = ; j <= col ; j++) {
if (a[i][j] != -) {
for (int k = ; k < ; k++) {
int x = i + move[k][] ;
int y = j + move[k][] ;
if (a[x] [y] != -)
map[ a[i][j] ] [ a[x][y] ] = ;
}
}
}
}
/* for (int i = 1 ; i <= cnt ; i++) {
for (int j = 1 ; j <= cnt ; j++) {
printf ("%d " , map[i][j]) ;
}
puts ("") ;
}*/
int all = ;
for (int i = ; i <= cnt ; i++) {
memset (sta , , sizeof(sta)) ;
if (hungary (i))
all ++ ;
}
// printf ("cnt = %d , all = %d\n" , cnt , all) ;
printf ("%d\n" , cnt - all / ) ;
}
return ;
}
Antenna Placement(匈牙利算法 ,最少路径覆盖)的更多相关文章
- poj3020 Antenna Placement 匈牙利算法求最小覆盖=最大匹配数(自身对应自身情况下要对半) 小圈圈圈点
/** 题目:poj3020 Antenna Placement 链接:http://poj.org/problem?id=3020 题意: 给一个由'*'或者'o'组成的n*m大小的图,你可以用一个 ...
- POJ 3020 Antenna Placement 匈牙利算法,最大流解法 难度:1
http://poj.org/problem?id=3020 #include <cstdio> #include <cstring> #include <vector& ...
- HDU 6311 最少路径覆盖边集 欧拉路径
Cover Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- poj 1422 Air Raid 最少路径覆盖
题目链接:http://poj.org/problem?id=1422 Consider a town where all the streets are one-way and each stree ...
- poj3041 Asteroids 匈牙利算法 最小点集覆盖问题=二分图最大匹配
/** 题目:poj3041 Asteroids 链接:http://poj.org/problem?id=3041 题意:给定n*n的矩阵,'X'表示障碍物,'.'表示空格;你有一把枪,每一发子弹可 ...
- 匈牙利算法实战codevs1022覆盖
1022 覆盖 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 有一个N×M的单位方格中 ...
- POJ-3020 Antenna Placement---二分图匹配&最小路径覆盖&建图
题目链接: https://vjudge.net/problem/POJ-3020 题目大意: 一个n*m的方阵 一个雷达可覆盖两个*,一个*可与四周的一个*被覆盖,一个*可被多个雷达覆盖问至少需要多 ...
- HDU - 6311 Cover(无向图的最少路径边覆盖 欧拉路径)
题意 给个无向图,无重边和自环,问最少需要多少路径把边覆盖了.并输出相应路径 分析 首先联通块之间是独立的,对于一个联通块内,最少路径覆盖就是 max(1,度数为奇数点的个数/2).然后就是求欧拉路 ...
- Antenna Placement POJ - 3020 二分图匹配 匈牙利 拆点建图 最小路径覆盖
题意:图没什么用 给出一个地图 地图上有 点 一次可以覆盖2个连续 的点( 左右 或者 上下表示连续)问最少几条边可以使得每个点都被覆盖 最小路径覆盖 最小路径覆盖=|G|-最大匹配数 ...
随机推荐
- 看牙与IT项目
周末为了一颗牙第五次去牙科诊所,得到的消息是:还需要观察至少2周才能做牙冠,同时发现了较深的牙结石需要做刮治,刮治疗需要2次.因此至少要再去医院3次.从去年的六月体检发现这颗牙的问题,目前最乐观估计也 ...
- ModernUI教程:使用预定义的页面布局
Modern UI for WPF自带了一组页面布局.Modern UI page是继承自control控件的,Page通过是通过ModernWindow.MenuLinkGroups属性来引用显示在 ...
- ejs
这个博客比较专业些http://sunnyhl.iteye.com/blog/1985539 ejs速度不是最快的,推荐最多大概是因为其简单的语法结构.主要通过<% %><%=%&g ...
- 一份完整的nginx配置
#user nobody;worker_processes 24;worker_rlimit_nofile 262144;worker_cpu_affinity 0000000000000000000 ...
- css3中transform的用法
transform:rotate旋转deg #box1{ -moz-transform:rotate(10deg); -webkit-transform:rotate(10deg); }transfo ...
- 年前辞职-WCF入门学习(5)
前言 第五集比较简单,视频也只有7分多钟,但是用处还是挺大的.下面我会介绍. 本来想第六集一起介绍的,后来发现第六集内容比较多,有半个多小时,就不一起了.网站规定6小时内只能发布一篇文章到首页,,那我 ...
- webstrom 中启用emmet插件的方法
参考页面:https://www.jetbrains.com/help/webstorm/2016.2/enabling-emmet-support.html Basics Native Emmet ...
- javamail技术
package com.zh.javaEmail; import java.util.*; import javax.mail.*; import javax.mail.internet.*; imp ...
- Java-ArrayList
package 集合类.list类; /** * System.Collections.ArrayList类是一个特殊的数组.通过添加和删除元素,就可以动态改变数组的长度. 一.优点 1.支持自动改变 ...
- 【Matplotlib】图例分开显示
作图时图例往往都会出现一个图例框内,如果需要不同类型的图例分别显示,比如显示两个图例. 基本上,出现两个图例的话,需要调用两次 legend .第一次调用,你需要将图例保存到一个变量中,然后保存下来. ...