uva 12549
12549 - Sentry Robots
Time limit: 1.000 seconds
We need to guard a set of points of interest using sentry robots that can
not move or turn. We can position a sentry at any position facing either
north, south, east or west. Once a sentry is settled, it guards the points of
interest that are infront of it. If two or more points are in the same row
or column a single robot can guard them all. Unfortunately, there are also
some obstacles that the robot cannot see through.
From a set of points of interest and obstacles lying on a grid, calculate
the minimum number of robots needed to guard all the points. In order to guard a point of interest, a
robot must be facing the direction of this point and must not be any obstacles in between.
Given the following grid, where # represents an obstacle and * a point of interest, the minimum
number of robots needed is 2 (a possible position and orientation is shown using arrows for each robot).
Note that this is not the actual input or output, just a gure.
For the following grid we need 4 robots because of the obstacles.
Input
The rst line of the input has an integer C representing the number of test cases that follow. Before
each test case there is an empty line.
For each case, the rst line has 2 integers, Y and X, representing the height and width of the grid.
The next line has an integer that indicates the number of points of interest P. The following P lines
will have the positions py and px of the points of interest, one point per line. The next line has an
integer that indicates the number of obstacles W. The following W lines will have the positions wy
and wx of an obstacle, one per line.
Output
For each test case print the minimum number of robots needed to guard all the points of interest, one
per line.
CONSTRAINTS:
1 C 50
1 Y; X 100
0 P Y X
0 W Y X
0 P + W Y X
1 px; wx X
1 py; wy Y
Sample Input
2
4 6
4
2 2
2 4
4 2
4 4
3
2 3
3 3
4 3
4 5
6
1 2
1 3
2 4
2 2
3 3
4 3
2
2 3
3 2
Sample Output
2
4

正解好像是二分图匹配,然而我直接贪了一贪,可能是数据水,思路见代码。
#include <cstdio>
#include <iostream>
#include <sstream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
#define ll long long
#define _cle(m, a) memset(m, a, sizeof(m))
#define repu(i, a, b) for(int i = a; i < b; i++)
#define repd(i, a, b) for(int i = b; i >= a; i--)
#define sfi(n) scanf("%d", &n)
#define pfi(n) printf("%d\n", n)
#define sfi2(n, m) scanf("%d%d", &n, &m)
#define pfi2(n, m) printf("%d %d\n", n, m)
#define pfi3(a, b, c) printf("%d %d %d\n", a, b, c)
#define MAXN 105
const int INF = 0x3f3f3f3f;
int mp[MAXN][MAXN];
int tot;
int main()
{
int c, p, w, x, y, px, py;
sfi(c);
while(c--)
{
sfi2(y, x);
y++, x++;
repu(i, , y) repu(j, , y) mp[i][j] = ;
sfi(p);
repu(i, , p)
{
sfi2(px, py);
mp[px][py] = ;
} sfi(w);
repu(i, , w)
{
sfi2(px, py);
mp[px][py] = ;
}
tot = ;
int t1, t2;
repu(i, , y) repu(j, , x)
if(mp[i][j] == )
{
tot++;
t1 = t2 = ;
repu(q, i + , y)
if(mp[q][j] == ) t1++;
else if(mp[q][j] == ) break;
repu(q, j + , x)
if(mp[i][q] == ) t2++;
else if(mp[i][q] == ) break;
if(t1 < t2)
{
repu(q, j, x)
if(mp[i][q] == ) mp[i][q] = ;
else if(mp[i][q] == ) break;
}
else
{
repu(q, i, y)
if(mp[q][j] == ) mp[q][j] = ;
else if(mp[q][j] == ) break;
}
}
pfi(tot);
}
return ;
}
uva 12549的更多相关文章
- UVA 12549 - 二分图匹配
题意:给定一个Y行X列的网格,网格种有重要位置和障碍物.要求用最少的机器人看守所有重要的位置,每个机器人放在一个格子里,面朝上下左右四个方向之一发出激光直到射到障碍物为止,沿途都是看守范围.机器人不会 ...
- uva 12549 最大流
思路:这题的原型题是比较经典的网络流.原型题模型就是把所有的障碍去掉. 有障碍做法还是一样的,只用将每个列和行重新划分,求最大流就行了. #include <cstring> #inclu ...
- UVa 12549 机器人警卫(最小点覆盖)
https://vjudge.net/problem/UVA-12549 题意: 在一个Y行X列的网格里有空地(.),重要位置(*)和障碍物(#),用最少的机器人看守所有重要位置,每个机器人要放在一个 ...
- UVA 12549 Sentry Robots (最小点覆盖)
这道题挺像hdu 5093 Battle ships的,不过那道题是要求最多放置的点数,而这道题是要求最小点覆盖. 顶点覆盖的定义是:在G中任意边至少有一个端点属于顶点集合S. 一个重要的位置有(x, ...
- 紫书 习题 11-9 UVa 12549 (二分图最小点覆盖)
用到了二分图的一些性质, 最大匹配数=最小点覆盖 貌似在白书上有讲 还不是很懂, 自己看着别人的博客用网络流写了一遍 反正以后学白书应该会系统学二分图的,紫书上没讲深. 目前就这样吧. #includ ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
随机推荐
- Fragment全解析系列(二):正确的使用姿势
作为一个稳定的app,从后台且回到前台,一定会在任何情况都能恢复到离开前的页面,并且保证数据的完整性. 如果你没看过本系列的第一篇,为了方便后面文章的介绍,先规定一个"术语",安卓 ...
- Radmin Server-3.5 完美绿色破解版(x32 x64通用) 第三版 + 单文件制作方法
Radmin Server v3.5 汉化破解绿色版(x32 x64通用) 第三版 下载链接: https://pan.baidu.com/s/1qYVcSQo 2016年7月8日更新第三版1.修复在 ...
- Git 笔记整理3
1,git clone某一个分支 git clone -b <branch> <remote_repo> 2,.git 文件太大 :clone的时候,可以指定深度,如下,为1即 ...
- 如何使用xshell远程连接ubuntu
在Ubuntu上安装ssh就可以使用xshell登录了,安装步骤: 1,sudo apt-get install openssh-server 2,然后启动ssh sudo /etc/init.d/s ...
- 微信小程序-表单
wxml <view> 按钮: <button size="{{buttom.size}}" type="{{buttom.type}}" p ...
- 21.TFS文件系统搭建笔记
TFS文件系统搭建笔记 参考地址: https://github.com/alibaba/tfs/blob/master/INSTALL.md https://github.com/alibaba/t ...
- 未解决的问题,登录163邮箱http://mail.163.com/,用xpath的方式定位密码输入框的时候,总是报找不到该元素
退出的时候出现: xpath定位方法: 注意xpath路径写的太长,如果层级全部写完定位不到,就尝试去掉一些层级
- ichart.js绘制虚线 ,平均分虚线
var Data=new Array(); Data[0] = { labels : ["第一单元","第二单元","第三单元"," ...
- CSS 制作三角形原理剖析
使用css制作三角形其实原理很简单,下面一步步解析. 1.html代码如下 <div class="triangle"> </div> 2.CSS代码 .t ...
- python pyqt4 ide eric安装
注意事项 关于python,pyqt的版本 笔者安装的是eric,原来电脑安装的是64位的python,32位的pyqt4,导致系统找不到pyqt,后来更换python版本为32搞定,猜测pyqt的版 ...