题面

题目链接

P3958 奶酪

题面

题目描述

现有一块大奶酪,它的高度为 $ h $ ,它的长度和宽度我们可以认为是无限大的,奶酪 中间有许多 半径相同 的球形空洞。我们可以在这块奶酪中建立空间坐标系,在坐标系中, 奶酪的下表面为 $ z=0 $ ,奶酪的上表面为 $ z=h $ 。

现在,奶酪的下表面有一只小老鼠 Jerry,它知道奶酪中所有空洞的球心所在的坐标。如果两个空洞相切或是相交,则 Jerry 可以从其中一个空洞跑到另一个空洞,特别地,如果一个空洞与下表面相切或是相交,Jerry 则可以从奶酪下表面跑进空洞;如果 一个空洞与上表面相切或是相交,Jerry 则可以从空洞跑到奶酪上表面。

位于奶酪下表面的 Jerry 想知道,在 不破坏奶酪 的情况下,能否利用已有的空洞跑 到奶酪的上表面去?

空间内两点 $ P_1(x_1,y_1,z_1),P_2(x_2,y_2,z_2) $ 的距离公式是:

\[dist(P_1,P_2)= \sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(z_1-z_2)^2}
\]

输入输出格式

输入格式

每个输入文件包含多组数据。

的第一行,包含一个正整数 $ T $ ,代表该输入文件中所含的数据组数。

接下来是 $ T $ 组数据,每组数据的格式如下: 第一行包含三个正整数 $ n,h $ 和 $ r $,两个数之间以一个空格分开,分别代表奶酪中空 洞的数量,奶酪的高度和空洞的半径。

接下来的 $ n $ 行,每行包含三个整数 $ x,y,z $ ,两个数之间以一个空格分开,表示空 洞球心坐标为 $ (x,y,z) $ 。

输出格式:

$ T $ 行,分别对应 $ T $ 组数据的答案,如果在第 $ i $ 组数据中,Jerry 能从下 表面跑到上表面,则输出Yes,如果不能,则输出No (均不包含引号)。

输入输出样例

输入样例

3
2 4 1
0 0 1
0 0 3
2 5 1
0 0 1
0 0 4
2 5 2
0 0 2
2 0 4

输出样例

Yes
No
Yes
'``` ##说明 【输入输出样例说明】 ![](https://cdn.luogu.org/upload/pic/10860.png) 第一组数据,由奶酪的剖面图可见: 第一个空洞在(0,0,0)(0,0,0)与下表面相切 第二个空洞在(0,0,4)(0,0,4)与上表面相切 两个空洞在(0,0,2)(0,0,2)相切 输出 Yes 第二组数据,由奶酪的剖面图可见: 两个空洞既不相交也不相切 输出 No 第三组数据,由奶酪的剖面图可见: 两个空洞相交 且与上下表面相切或相交 输出 Yes 【数据规模与约定】 对于 20% 的数据, $ n=1,1 \leq h,r \leq 10,000 $ ,坐标的绝对值不超过 10,000。 对于 40% 的数据, $ 1 \leq n \leq 8,1 \leq h,r \leq 10,000 $ ,坐标的绝对值不超过 10,000。 对于 80% 的数据, $ 1 \leq n \leq 1,000,1 \leq h,r \leq 10,000 $ ,坐标的绝对值不超过 10,000。 对于 100% 的数据, $ 1 \leq n \leq 1,000,1 \leq h,r \leq 1,000 , T \leq 20 $ ,坐标的 绝对值不超过 1,000,000,000。 【时空限制】 1000ms,256MB #思路 这一题可以先找出所有的连通块,这个可以用并查集来实现。然后找出与底端连通和顶端连通的洞,依次配对,如果父亲是一样的,证明有一条路径可以从底端到顶端 #AC代码 ```cpp
#include<bits/stdc++.h>
const long long maxn=1005;
using namespace std; long long n,h,r;
long long x[maxn],y[maxn],z[maxn];
long long fa[maxn]; long long FF(long long p)
{
if(p!=fa[p]) {fa[p]=FF(fa[p]);}
return fa[p];
} void Merge(long long a,long long b)
{
long long f1=FF(a);
long long f2=FF(b);
if(f1!=f2) fa[f1]=f2;
} bool can(long long i,long long j)
{
double len=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])+(z[i]-z[j])*(z[i]-z[j]));
return len<=2*r;
} void work()
{
scanf("%lld%lld%lld",&n,&h,&r);
for(long long i=1;i<=n;i++) scanf("%lld%lld%lld",&x[i],&y[i],&z[i]);
for(long long i=1;i<=n;i++) fa[i]=i;
for(long long i=1;i<=n;i++)
for(long long j=i+1;j<=n;j++)
if(can(i,j)) Merge(i,j);
for(long long i=1;i<=n;i++)
if(z[i]<=r)
{
for(long long j=1;j<=n;j++)
if(z[j]+r>=h)
{
if(FF(i)==FF(j))
{
printf("Yes\n");
return;
}
}
}
printf("No\n");
return;
} int main()
{
long long t;
scanf("%lld",&t);
for(long long i=1;i<=t;i++) work();
return 0;
}

总结

这题还是有几个坑。

1.多组数据,要初始化 2.Yes,No注意大小写 3.要开long long

洛谷 P3958 奶酪 并查集的更多相关文章

  1. 洛谷P3958 奶酪 并查集

    两个空洞可互达当且仅当两个空洞相切,即球心距离小于等于球的直径. 一一枚举两个可互达的空洞,并用并查集连起来即可. Code: #include<cstdio> #include<c ...

  2. 洛谷 P3958 奶酪

    谨以此题来纪念我爆炸的NOIp2017 这个题虽然很多人说是并查集,但是搜索也是毫无压力的,考场搜索细节写挂,爆了个不上不下的80分.今天无意看到这道题,终于AC 首先这道题要考虑一下精度问题,虽然出 ...

  3. 洛谷P3958 奶酪

    题目链接 这道题貌似可以用BFS来写吧qwq. 我用的是并查集,把联通的洞合并在同一个几何中,最后只需要判断是否存在上表面和下表面有相同集合的洞即可. 但是需要注意的是还有这样的一种情况:有一个大洞贯 ...

  4. 『题解』洛谷P3958 奶酪

    Portal Portal1: Luogu Portal2: LibreOJ Portal3: Vijos Description 现有一块大奶酪,它的高度为\(h\),它的长度和宽度我们可以认为是无 ...

  5. 洛谷P3295 萌萌哒 并查集 + ST表

    又切一道紫题!!! 成功的(看了一吨题解之后),我A掉了第二道紫题. 好,我们仔细观察,发现这是一个排列组合问题. 有些限定条件,要相等的地方,我们就用并查集并起来.最后一查有多少个并查集,就有多少个 ...

  6. 洛谷P4092树——并查集

    题目:https://www.luogu.org/problemnew/show/P4092 利用并查集,倒序离线,那么从倒序来看被撤销标记的点就再也不会被标记,所以用并查集跳过: 莫名其妙的WA,调 ...

  7. 洛谷P2391 白雪皑皑(并查集)

    题目背景 “柴门闻犬吠,风雪夜归人”,冬天,不期而至.千里冰封,万里雪飘.空中刮起了鸭毛大雪.雪花纷纷,降落人间. 美能量星球(pty 在 spore 上的一个殖民地)上的人们被这美景所震撼.但是 p ...

  8. 洛谷 P2391.白雪皑皑 (并查集,思维)

    题意:有\(n\)个点,对这些点进行\(m\)次染色,第\(i\)次染色会把区间\((i*p+q)\ mod\ N+1\)和\((i*q+p)\ mod\ N+1\)之间的点染成颜色\(i\),问最后 ...

  9. 洛谷P2024食物链——并查集补集的灵活运用

    题目:https://www.luogu.org/problemnew/show/P2024 自己在做本题时最大的障碍就是:不会在一个集合的father改变时把相应的补集也跟着改变. 借鉴题解后,才明 ...

随机推荐

  1. thinkphp+ajax 实现点击加载更多数据

    https://blog.csdn.net/a898712940/article/details/78545599?utm_source=blogxgwz8 适用范围:thinkphp3.2和thin ...

  2. pyd打包补充

    网上说的将python代码,通过Cython打包成pyd的教程挺多,好处也多,主要有两个: 1.隐藏代码 2.加速运行速度 补充两点: 1.打包脚本配置 __build__.py from distu ...

  3. spring cloud深入学习(十)-----配置中心和消息总线(配置中心终结版)

    如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端,当客户端越来越多的时候,需要每个客户端都执行一遍,这种方案就不太适合了.使用 ...

  4. Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again

    WARN: SQL Error: , SQLState: HY000 八月 , :: 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logEx ...

  5. UVA11722 Jonining with Friend

    Joining with Friend You are going from Dhaka to Chittagong by train and you came to know one of your ...

  6. GUID(Globally Unique Identifier)全局唯一标识符

    最近有大量数据存入数据库时,因为主键为一个nvarchar类型,起初想着用int 类型,每次打开表的时候,获取最后一行的ID,然后让其++. 但发现由于字段是char类型,数据库对其进行了排序.再次插 ...

  7. sql 分页rownumber方式

    alter procedure [dbo].[proc_getpaging] ( ), --表名(可以为多表) ) = '*', --字段名(全部字段为*) ), --排序字段(支持多字段不用加ord ...

  8. js图片碎片效果(移动端也适用)

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. CI框架 - Xhprof性能监控,用钩子hooks实现

    安装Xhprof参考:http://www.cnblogs.com/qq917937712/p/8889001.html 第一步:配置config.php $config['enable_hooks' ...

  10. Kubernetes 基于 ubuntu18.04 手工部署 (k8s)

    由于工作的需要, 手工部署一个 Kubernetes 环境(k8s).(以前都是云上搞定,拿来用) 习惯把这种工作记录下来,自己备查也和别人分享 网上相关文章很多, 我也参考了很多,这里推荐一个 链接 ...