zoukankan      html  css  js  c++  java
  • 洛谷 P3958 奶酪

    题目

    P3958 奶酪

    思路

    并查集。将奶酪的下表面设为(0)号,输入空洞位置时判断该空洞如果与下表面相切或相交就和到一个集合里,最后找到与上表面相切或相交的空洞判断与(0)号是否在一个集合里。

    (Code)

    #include<iostream>
    #include<cstring>
    #include<string>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #define MAXN 1001
    #define rr register
    #define int long long
    using namespace std;
    int t,n,h,r,fa[MAXN];
    int x[MAXN],y[MAXN],z[MAXN];
    int find(int x){
    	return fa[x]==x?x:fa[x]=find(fa[x]);
    }
    inline void read(int &T){
    	int x=0;bool f=0;char c=getchar();
    	while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
    	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    	T=f?-x:x;
    }
    inline double dist(int a,int b){
    	return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b])+(z[a]-z[b])*(z[a]-z[b]));
    }
    
    signed main(){
    	read(t);
    	while(t--){
    		read(n),read(h),read(r);
    		for(rr int i=0;i<=MAXN;++i) fa[i]=i;
    		for(rr int i=1;i<=n;++i){
    			read(x[i]),read(y[i]),read(z[i]);
    			if(z[i]-r<=0){
    				fa[i]=0;
    			}
    		}
    		for(rr int i=1;i<=n;++i){
    			for(rr int j=1;j<=n;++j){
    				if(find(i)!=find(j)&&dist(i,j)<=(2*r)){
    					fa[find(i)]=find(j);
    				}
    			}
    		}
    		bool f=0;
    		for(rr int i=1;i<=n;++i){
    			if(z[i]+r>=h&&find(0)==find(i)){
    				puts("Yes");
    				f=1;
    				break;
    			}
    		}
    		if(!f) puts("No");
    	}
    	return 0;
    }
    
  • 相关阅读:
    Java下的tinylog日志打印
    rmi的调用
    linux下hex转ascii
    CSP攻略
    ThinkPHP5代码执行的简单分析
    MySQL UDF(User Defined Function)提权
    与邮件协议相关的端口
    常见哈希算法的密文格式
    ThinkPHP 5.0.x 反序列化漏洞 PoC
    Tomcat AJP协议文件包含漏洞(CVE-2020-1938)
  • 原文地址:https://www.cnblogs.com/poi-bolg-poi/p/11519948.html
Copyright © 2011-2022 走看看