• 奶酪


    题目链接:

    奶酪

    题目分析:

    并查集维护联通,最好乘起来防止掉精度

    代码:

    #include<bits/stdc++.h>
    #define int long long
    #define eps 1e-8
    #define N (5000 + 10)
    using namespace std;
    inline int read() {
    	int cnt = 0;
    	int f = 1; char c = getchar();
    	while (!isdigit(c)) {if (c == '-') f = -f; c = getchar();}
    	while (isdigit(c)) {cnt = (cnt << 3) + (cnt << 1) + (c ^ 48); c = getchar();}
    	return cnt * f;
    }
    int n, T, fa[N];
    double h, r;
    int get_fa(int x) {return (fa[x] == x) ? x : fa[x] = get_fa(fa[x]);}
    ////int get_fa(int x) {return fa[x];}
    struct node {
    	double x, y, z;
    }a[N]; 
    inline int Pow(int x) {return x * x;}
    bool cmp(node a, node b) {
    	return r * r * 4 >= Pow(a.x - b.x) + Pow(a.y - b.y) + Pow(a.z - b.z);
    }
    signed main() {
    	T = read();
    	while (T--) {
    		n = read(), h = read(), r = read();
    		for (register int i = 1; i <= n + 2; ++i) fa[i] = i;
    //		read(n), read(h), read(r);
    //		for (register int i = 1; i <= n + 2; ++i) cout<<fa[i]<<" ";
    		for (register int i = 1; i <= n; ++i) {
    			a[i].x = read(), a[i].y = read(), a[i].z = read();
    			if (a[i].z - r <= 0) fa[get_fa(i)] = n + 1;
    			if (a[i].z + r >= h) fa[get_fa(i)] = n + 2;
    		}
    		for (register int i = 1; i <= n; ++i)
    			for (register int j = i + 1; j <= n; ++j) {
    				if (cmp(a[i], a[j])) {
    					int fx = get_fa(i), fy = get_fa(j);
    					if (fx == fy) continue;
    					fa[fx] = fy;
    				}
    			}
    		if (get_fa(n + 1) != get_fa(n + 2)) {printf("No
    "); continue;}
    		else printf("Yes
    ");
    	}
    	return 0; 
    }
    
  • 相关阅读:
    北京之行
    csharp进界
    医院OA系统新思考
    茗洋博客
    monkey主要参数详解
    使用python判断Android自动化的渠道包是否全部打完
    手机连接mac电脑无法使用adb命令解决方法
    Python正则表达式指南
    Mac基本命令大全
    Mac之vim普通命令使用
  • 原文地址:https://www.cnblogs.com/kma093/p/11620022.html
Copyright © 2020-2023  润新知