A - Artwork ( 并查集 )
A - Artwork ( 并查集 )
题意:在一个n*m的房间里,有k个摄像头,每个摄像头给出坐标(x,y)和范围半径r , 小偷在左下角, 宝藏在右上角,问小偷能否成功偷到宝藏。
思路:可以把房间放到x-y坐标轴的第一象限, 这样小偷在(0,0) 宝藏zai(n,m), 我们先记录每一个圆和四周墙壁的相交情况,再通过并查集来确定圆和圆的关系, 如果圆1和上边界相交,圆2和下边界相交, 那么这个并查集的集合就把房间从竖直方向分开了, 小偷一定不能到达右上角。
代码:
#include <bits/stdc++.h>using namespace std;const int maxn = 1e3+10;
struct node {int x,y,r;int id;int up,down,left,right;
}a[maxn];
int x,y,n;
int pre[maxn];
int via[maxn];int root( int x )
{if ( x!=pre[x] ) {pre[x] = root(pre[x]);}return pre[x];
}int join( int a, int b )
{int aa = root(a);int bb = root(b);if ( aa!=bb ) {pre[aa] = bb;}
}int isnect( node a, node b )
{int dis = (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y);if ( (a.r+b.r)*(a.r+b.r)>=dis ) {return 1;}return 0;
}int main()
{int i,j,k;cin >> x >> y >> n;for ( i=0; i<n; i++ ) {scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].r);a[i].id = i;a[i].up=a[i].down=a[i].left=a[i].right=0;if ( a[i].x-a[i].r<=0 ) a[i].left = 1;if ( a[i].x+a[i].r>=x ) a[i].right = 1;if ( a[i].y-a[i].r<=0 ) a[i].down = 1;if ( a[i].y+a[i].r>=y ) a[i].up = 1;}for ( i=0; i<n; i++ ) pre[i] = i;for ( i=0; i<n; i++ ) {for ( j=0; j<i; j++ ) {if ( isnect(a[i],a[j])==1 ) {join(i,j);}}}int isp = 1;for ( i=0; i<n; i++ ) {if ( via[i]==0 ) {int nowleft=0,nowright=0,nowup=0,nowdown=0;via[i] = 1;int father = pre[i];if ( a[i].left==1 ) nowleft=1;if ( a[i].right==1 ) nowright=1;if ( a[i].up==1 ) nowup=1;if ( a[i].down==1 ) nowdown=1;for ( j=i+1; j<n; j++ ) {if ( via[j]==0 && pre[j]==father ) {if ( a[j].left==1 ) nowleft=1;if ( a[j].right==1 ) nowright=1;if ( a[j].up==1 ) nowup=1;if ( a[j].down==1 ) nowdown=1;}}if ( nowleft==1&&nowdown==1 ) isp=0;else if ( nowleft==1&&nowright==1 ) isp=0;else if ( nowup==1&&nowright==1 ) isp=0;else if ( nowup==1&&nowdown==1 ) isp=0;}}if ( isp==1 ) cout << "S" << endl;else cout << "N" << endl;return 0;
}
A - Artwork ( 并查集 )相关推荐
- gym:Problem A Artwork(并查集思维题)
20162017-acmicpc-nordic-collegiate-programming-contest-ncpc-2016 Problem A Artwork 题目链接 http://codef ...
- ArtWork+并查集二维
问题 A: ArtWork 时间限制: 4 Sec 内存限制: 128 MB 提交: 18 解决: 6 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 A template for ...
- ArtWork(并查集+降维)
ArtWork 时间限制: 4 Sec 内存限制: 128 MB ...
- CSU2020:Artwork(并查集)
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2022 题目: Description A template for an artwo ...
- 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈
题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法
tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...
- POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树
一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...
- 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...
最新文章
- 值传递 和 地址传递 的区别(好多句话才可以说清)
- matlab--离散(discrete)数据绘图
- [转帖]爬过这 6 个坡,你就能对 Linux 操作系统了如指掌
- BZOJ 3436 小K的农场 差分约束
- mpvue 微信小程序api_第三方框架与原生微信小程序开发框架性能之比较 | Q荐读...
- glibc手动升级高版本导致系统(RedHat/Centos)异常(无法开机等)的解决方法(回退低版本glibc)
- 华南理工大学和浙大计算机学院,浙江大学和华南理工大学的办学实力比较
- [转]Laravel 4之URL生成
- 3. $()下的常用方法
- 使用 ADO.NET连接SQL Azure
- 轨迹压缩文献阅读: Similarity-Based Compression of GPS Trajectory Data
- Kafka和Unix管道的示例
- rpm、lpm是什么意思?
- 【H5】 svg的 defs用法 渐变
- c++多线程detach函数用法的实例
- 零度飘逸LDPY GhostWin7 Sp1纯净选择版V7.0(驱动增强版)
- Ubuntu进入登录界面鼠标键盘失灵
- 华为OD机试 - 德州扑克(Java JS Python)
- 山东计算机技能高考试题,(完整版)2016山东春季高考技能考试-信息技术类专业试题...
- csgo跑图文件_[CSGO]Neko社区:跑图服务器简易使用指南
热门文章
- mouseover和mouseout区别
- java 百家姓_java判断姓是否合格 百家姓
- Unity3D RectTransform中文图文详细-anchors用法pivot分析
- b站视频详情数据抓取,自动打包并发送到指定邮箱(单个或者群发)
- 电商运营从哪些方面做数据分析?
- 全球域名商域名增量Top15:51DNS排名降至第十二
- 错误	C2248	“Bus::operator ()”: 无法访问 private 成员(在“Bus”类中声明)
- 【20210401】用Python的turtle库绘制呲牙表情包
- 关于协作与个人英雄主义
- 【Redis笔记】一起学习Redis | 如何利用Redis实现一个分布式锁?