90分求助
查看原帖
90分求助
538425
5168lyc楼主2022/8/5 19:34
#include<bits/stdc++.h>
using namespace std;
long long t, n, h, r, x[1005], y[1005], z[1005], fa[1010];
void init() {
	for (int i = 1;i <= 1005;i++) {
		fa[i] = i;
	}
}
int get(int x) {
	if (fa[x] == x) {
		return x;
	}
	return fa[x] = get(fa[x]);
}
void merge(int x, int y) {
	x = get(x);
	y = get(y);
	if (x != y) {
		fa[y] = x;
	}
}
int main() {
	scanf("%lld", &t);
	while(t--) {
		scanf("%lld%lld%lld", &n, &h, &r);
		init();
		for (int i = 1;i <= n;i++) {
			scanf("%lld%lld%lld", &x[i], &y[i], &z[i]);
			if (z[i] - r <= 0) {
				merge(0, i);
			}
			if (z[i] + r >= h) {
				merge(i, 1005);
			}
		}
		for (int i = 1;i <= n;i++) {
			for (int j = i + 1;j <= n;j++) {
				if (pow((x[i] - x[j]), 2) + pow((y[i] - y[j]), 2) + pow((z[i] - z[j]), 2) <= 4 * r * r) {
					merge(i, j);
				}
			}
		}
		if (get(0) == get(1005)) {
			printf("Yes\n");
		} else {
			printf("No\n");
		}
	}
    return 0;
}

第7个测试点过不了,WA了 求助大佬

2022/8/5 19:34
加载中...