AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

3958 奶酪

作者: 作者的头像   cccccccup ,  2025-07-05 10:34:28 · 福建 ,  所有人可见 ,  阅读 1


0


题目

微信截图_20250705103049.png
微信截图_20250705103111.png
微信截图_20250705103124.png

分析

使用并查集
如果两个洞相交(或相切),就把它们连入一个集合
最后判断每一条通道是否存在元素与底部、顶部相连即可。如果都有,那么输出 Yes。

易错点

最后要判断每一条通道
因为只要有一条能从底部到顶部的,就代表能到了
其他易错点见代码的备注

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;//记得开ll
const int N=1e3+7;
ll p[N];
int t;
ll n,h;
ll r;


ll x[N],y[N],z[N];//用数组计数,偏的数据结构别用,不然会导致错误
set<ll> s;
ll  lst[N];
ll  hst[N];
ll find(ll  x)
{
    if(p[x]!=x) return find(p[x]);
    else return p[x];
}
bool reachable(ll  x1,ll  y1,ll  z1,ll x2,ll y2,ll z2)
{
    double dist;
    dist=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));
    //printf("%lf %d\n",dist,r);
    if(dist<=(double)2*r) return true;
    else return false;
}
int main()
{
    scanf("%d",&t);
    while(t--){
        scanf("%lld%lld%lld",&n,&h,&r);
        for(int i=1;i<=n;i++){
            scanf("%lld%lld%lld",&x[i],&y[i],&z[i]);
            p[i]=i;
            for(int k=1;k<i;k++){
                if(reachable(x[i],y[i],z[i],x[k],y[k],z[k])){
                    p[find(k)]=p[find(i)];
                }
            }
        }
        //把所有祖宗节点存到s中
        for(int i=1;i<=n;i++) s.insert(find(i));
        for(int i=1;i<=N;i++) lst[i]=1e9+7;
        for(int i=1;i<=N;i++) hst[i]=-1;
        //遍历一遍vec,找到所有idx的最大z和最小z
        for(int i=1;i<=n;i++){
            ll parent=find(i);
            lst[parent]=min(lst[parent],z[i]-r);
            hst[parent]=max(hst[parent],z[i]+r);
        }
        int flag=0;
        for(auto i:s){
            if(lst[i]<=0&&hst[i]>=h){
                flag=1; break;
            }
        }
        if(flag==1) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息