Artwork Gym - 102346A

题意:给n*m的地图,入口是(0,0),出口是(n,m),其中有k个监视器,坐标是(xi,yi),监视半径是r,问一个人能不能不被监视到,从起点到终点。

如果不能走到终点,无非便是监视范围把路全堵死了,所以开始的想法便是计算几何题,看多个圆能不能把横的和竖的都给覆盖了,但很明显行不通,然后想了想觉得这可以转换成一个图的题。

我们把每个监视器看出点,然后遍历每个监视器跟它相交(相切,包含)的其他点,已经看一下这个圆会涉及到那些边界。然后会把路封死的组合便是,上边界跟左边界,上边界跟下边界,右边界跟下边界,右边界跟左边界。

(也就是上图中五颜六色的线)

所以我们就看每个连通块涉及的边界组合中有没有上述边界。

 #include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e3+,M=N*N+;
struct Side{
int v,ne;
}S[M<<];
bool vis[N],book[];
int n,m,k,sn,head[N],xx[N],yy[N],rr[N];
void init(){
sn=;
for(int i=;i<k;i++){
head[i]=-;
vis[i]=false;
}
}
void add(int u,int v){
S[sn].v=v;
S[sn].ne=head[u];
head[u]=sn++;
}
int pf(int x){
return x*x;
}
bool judge(int x,int y){
return pf(xx[x]-xx[y])+pf(yy[x]-yy[y])<=pf(rr[x]+rr[y]);
}
void dfs(int u){
vis[u]=true;
//0 1 2 3分别代表上 右 下 左 边界
if(xx[u]-rr[u]<=) book[]=true;
if(yy[u]+rr[u]>=m) book[]=true;
if(xx[u]+rr[u]>=n) book[]=true;
if(yy[u]-rr[u]<=) book[]=true;
for(int i=head[u],v;~i;i=S[i].ne){
v=S[i].v;
if(!vis[v]) dfs(v);
}
}
bool solve(){
for(int i=;i<k;i++){
if(vis[i]) continue;
for(int j=;j<;j++) book[j]=false;
dfs(i);
if((book[]||book[])&&(book[]||book[])) return false;
}
return true;
}
int main(){
while(~scanf("%d%d%d",&n,&m,&k)){
init();
for(int i=;i<k;i++) scanf("%d%d%d",&xx[i],&yy[i],&rr[i]);
for(int i=;i<k;i++)
for(int j=i+;j<k;j++) if(judge(i,j)){
add(i,j);
add(j,i);
}
if(solve()) printf("S\n");
else printf("N\n");
}
return ;
}

小小年纪不学好

Gym 102346A Artwork dfs的更多相关文章

  1. Artwork (Gym - 102346A)【DFS、连通块】

    Artwork (Gym - 102346A) 题目链接 算法 DFS,连通块 时间复杂度:O(k*n + k * k) 1.这道题就是让你判断从(0,0)到(m,n),避开中途所有的传感器(传感器的 ...

  2. Gym 100463D Evil DFS

    Evil Time Limit: 5 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments Descri ...

  3. Codeforces Gym 100463D Evil DFS

    Evil Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments Descr ...

  4. Codeforces Gym 100650B Countdown DFS

    Problem B: CountdownTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/conte ...

  5. Tourists Gym - 101002I LCA——dfs+RMQ在线算法

    LCA(Least Common Ancestors),即最近公共祖先,是指这样一个问题:在有根树中,找出某两个结点u和v最近的公共祖先(另一种说法,离树根最远的公共祖先). 知识需求:1)RMQ的S ...

  6. UVaLive 6950 && Gym 100299K Digraphs (DFS找环或者是找最长链)

    题意:有n个只包含两个字母的字符串, 要求构造一个m*m的字母矩阵, 使得矩阵的每行每列都不包含所给的字符串, m要尽量大, 如果大于20的话构造20*20的矩阵就行了. 析:开始吧,并没有读对题意, ...

  7. L - The Shortest Path Gym - 101498L (dfs式spfa判断负环)

    题目链接:https://cn.vjudge.net/contest/283066#problem/L 题目大意:T组测试样例,n个点,m条边,每一条边的信息是起点,终点,边权.问你是不是存在负环,如 ...

  8. Gym - 101550A Artwork (并查集在线做法)

    题目链接 题意:给你一个n*m的网格图,初始时格点全白,每次可以将一段连续的格点涂黑.求出每次操作之后白色连通块的数量. 看了看网上的题解,基本全是离线的做法.其实这道题是有在线的做法的,利用了对偶图 ...

  9. ACM: Gym 100935G Board Game - DFS暴力搜索

    Board Game Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u  Gym 100 ...

随机推荐

  1. 【SoloPi】SoloPi使用4-功能使用,一机多控

    Soloπ是什么Soloπ是一个无线化.非侵入式的Android自动化工具,公测版拥有录制回放.性能测试.一机多控三项主要功能,能为测试开发人员节省宝贵时间. 一机多控功能Soloπ支持通过操作一台主 ...

  2. springboot 常见的启动器

    <!--pringBoot提供了一个名为spring-boot-starter-parent的工程, 里面已经对各种常用依赖(并非全部)的版本进行了管理 我们的项目需要以这个项目为父工程,这样我 ...

  3. 编写一个stm32 svc关中断函数

    做到了让stm32触发svc中断并传递进去参数然后切换到handler模式并修改特殊寄存器的值,从而达到关中断,但是其实这个程序直接就是特权级,故不进入handler模式也可以修改特殊寄存器..... ...

  4. CentOS7安装CDH 第七章:CDH集群Hadoop的HA配置

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  5. Windows Server 2008更改SID

    参考:Windows Server 2012 克隆修改SID 前言 克隆(软克隆,硬克隆)虚拟机后,虚拟机不光名称一样,IP一样(设置静态IP情况下),连SID也一样 什么是SID SID 安全标识符 ...

  6. 【FRDM-K64F学习笔记】使用ARM mbed和Keil MDK下载你的第一个程序

    FRDM-K64F开发平台采用MK64FN1M0VLL12微控制器.该控制器包含一个带有浮点单元的ARM Cortex-M4内核.其最高工作频率为120MHz,具有256KB的RAM.1MB闪存以及许 ...

  7. 永远不会执行的cron表达式

    场景是这样的,在服务里利用sprint boot的@Scheduled(cron = "${xx.run.schedule}")定义了一个定时服务,xx.run.schedule变 ...

  8. CPC组队赛训练记录

    2017中国大学生程序设计竞赛-哈尔滨站 (rank 39)solved 4 补 1 2018 CCPC 吉林 solved 5 2017CCPC秦皇岛 solved 4 待补题 2017ACM/IC ...

  9. MySQL进阶11--DDL数据库定义语言--库创建/修改/删除--表的创建/修改/删除/复制

    /*进阶 11 DDL 数据库定义语言 库和表的管理 一:库的管理:创建/修改/删除 二:表的管理:创建/修改/删除 创建: CREATE DATABASE [IF NOT EXISTS] 库名; 修 ...

  10. logstash可以考虑在项目中用起来

    在用Node.js开发项目的时候,我们常用 log4js 模块来进行日志的记录,可以通过配置 log4js 的 Appenders 将日志输出到Console.File和GELF等不同的地方. log ...