NOIp 2017 奶酪 【并查集】 By cellur925
Orz去年考场上做这道题的我应该还在抱怨没学过空间几何,不一会太困了就开始打瞌睡,然后为了防止睡觉开始在devc++上写默写离骚(逃
思路:如果两个空洞相交,那么把他们并在一个集合里。最后对于每个集合,查看他们中是否同时存在与下表面相通和与上表面相通的空洞,存在则Yes.
细节:1 如何判断相交?类比平面中的概念,判断空间中两圆是否相交同样可以通过圆心间距离是否小于等于二倍半径来确定。
2 如何判断是否同时存在两个与下表面相通和与上表面相通的空洞?可以在输入的时候预处理出所有与下表面相通和与上表面相通的空洞,然后将他们进行枚举,如果存在在同一集合的情况则合法。
3 开long long!!!
Code
#include<cstdio>
#include<cmath>
#define maxn 1090 using namespace std;
typedef long long ll; int T;
ll n,h,r,cnt,sum;
bool flag;
int fa[maxn],qaq[maxn],qwq[maxn];
struct node{
ll x,y;
ll z;
}point[maxn]; int getf(int p)
{
if(fa[p]==p) return p;
else return getf(fa[p]);
} void init()
{
cnt=;sum=;flag=;
} double dis(int l,int r)
{
return sqrt((point[l].x-point[r].x)*(point[l].x-point[r].x)+(point[l].y-point[r].y)*(point[l].y-point[r].y)+(point[l].z-point[r].z)*(point[l].z-point[r].z));
} int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld%lld",&n,&h,&r);
for(int i=;i<=n;i++)
{
scanf("%lld%lld%lld",&point[i].x,&point[i].y,&point[i].z);
if(point[i].z-r<=) qaq[++cnt]=i;
if(point[i].z+r>=h) qwq[++sum]=i;
}
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(i==j) continue;
if(dis(i,j)<=(double)*r)
{
int pp=getf(i);
int qq=getf(j);
if(pp!=qq)
fa[qq]=pp;
}
}
for(int i=;i<=cnt;i++)
{
for(int j=;j<=sum;j++)
if(getf(qaq[i])==getf(qwq[j]))
{
printf("Yes\n");
flag=;
break;
}
if(flag) break;
}
if(!flag) printf("No\n");
init();
}
return ;
}
小结:开始看题看的我一头雾水 T1难度都做不出
我还是太弱了。
NOIp 2017 奶酪 【并查集】 By cellur925的更多相关文章
- #C++初学记录(奶酪#并查集)
原题目:牛客网 题目描述 : 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞.我们可以在这块奶酪中建立空间坐标系, 在坐标系中,奶酪的下表面为 ...
- NOIP2017 Day2 T1 奶酪(并查集)
题目描述 现有一块大奶酪,它的高度为 hhh ,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞.我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为z=0z ...
- 洛谷 P3958 奶酪 并查集
目录 题面 题目链接 题面 题目描述 输入输出格式 输入格式 输出格式: 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P3958 奶酪 题面 题目描述 现有一块大奶酪 ...
- NOIp2017D2T1(luogu3968) 奶酪 (并查集)
并查集. 判相切或相交的时候可以两边同时平方,就不需要double和开根号了. #include<cstdio> #include<cstring> #include<a ...
- 浅谈并查集 By cellur925【内含题目食物链、银河英雄传说等】
什么是并查集? 合并!查询!集合! 专业点说? 动态维护若干不重叠的和,支持合并查询的数据结构!(lyd老师说的) 数据结构特点:代表元.即为每个集合选择一个固定的元素,作为整个集合的代表,利用树形结 ...
- 洛谷P3958 奶酪 并查集
两个空洞可互达当且仅当两个空洞相切,即球心距离小于等于球的直径. 一一枚举两个可互达的空洞,并用并查集连起来即可. Code: #include<cstdio> #include<c ...
- [noip模拟]心<并查集>
背景描述: 不是一切深渊都是灭亡 不是一切灭亡都覆盖在弱者的头上 ——<这也是一切> 舒婷 有N个透明的盒子, 每个盒子里面有两个不同颜色的球, 总共有M种颜色. Alice和Bob又在玩 ...
- [NOIP 2017] 奶酪
[题目链接] http://uoj.ac/problem/332 [算法] 直接搜索即可 注意使用long long [代码] #include<bits/stdc++.h> using ...
- Codevs 3287 货车运输 2013年NOIP全国联赛提高组(带权LCA+并查集+最大生成树)
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description A 国有 n 座 ...
随机推荐
- java构造方法的特点和理解--三只坚果
构造方法的特点:1.首先构造方法是基于类,名字必须与类的名字完全相同(构造方法一般是自己编写的类需要初始化)2.每个类都有一个默认的构造方法,既无参数又无返回值,其作用是使用new操作符创建新对象后初 ...
- MySQL查询在一个表而不在另一个表中的数据
1.使用not in,容易理解,效率低 select distinct A.ID from A where A.ID not in (select ID from B) 2.使用left join.. ...
- java比较两个日期大小
方法一 /** * 比较两个日期之间的大小 * * @param d1 * @param d2 * @return 前者大于后者返回true 反之false */ public boolean com ...
- android多个fragment返回键层层返回
在FragmentActivity的fragment跳转的时候加入到执行栈. public void switchFrag(BaseFragment to) { getSupportFragmentM ...
- Java-ReentrantReadWriteLock的简单样例
内容:读锁时共享的.写锁时相互排斥的(可见执行结果).都是通过AQS实现的. public class ReentrantReadWriteLockTest { static class MyObje ...
- break return continue
1.return 语句的作用 (1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行 (2) return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返 ...
- aix用户登录次数受限问题(3004-300 输入了无效的登录名或password)
当登录AIX系统.username或password不对以至于多次登录,超过系统设定的次数,怎样解锁: 1.用root用户登录系统 2.chuser unsuccessful_login_count= ...
- java反射(2)+Class.forName( )
在上一篇文章中说说java反射(1)我们已经了解了反射的基本概念以及它的原理,但是我们知道反射只能能用它来做些什么呢? 其实在我们很多已经很熟的框架中都有它的身影,例如Hibernate框架中的关联映 ...
- webService和RMI
1.请求: servlet:提供了请求/响应模式,是JAVA的一种规范,只能使用于java上,用来替代早期使用的难懂的CGI,是一种无状态的请求响应,客户端访问一个服务器的url,只需要发送简单的ht ...
- +Java中的native关键字浅析(Java+Native+Interface)++
JNI是Java Native Interface的 缩写.从Java 1.1开始,Java Native Interface (JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的 ...