python(本题唯一python)
2025-03-27 18:52:55
发布于:浙江
6阅读
0回复
0点赞
import sys
from collections import deque
def main():
data = list(map(int, sys.stdin.read().split()))
ptr = 0
T = data[ptr]
ptr += 1
for _ in range(T):
n = data[ptr]
h = data[ptr + 1]
r = data[ptr + 2]
ptr += 3
holes = []
for _ in range(n):
x = data[ptr]
y = data[ptr + 1]
z = data[ptr + 2]
ptr += 3
holes.append((x, y, z))
# 预处理接触上下表面的洞
bottom = []
top = []
for i in range(n):
x, y, z = holes[i]
if z <= r:
bottom.append(i)
if z + r >= h:
top.append(i)
if not bottom or not top:
print("No")
continue
# 构建邻接表
adj = [[] for _ in range(n)]
for i in range(n):
for j in range(i + 1, n):
xi, yi, zi = holes[i]
xj, yj, zj = holes[j]
dx = xi - xj
dy = yi - yj
dz = zi - zj
dist_sq = dx * dx + dy * dy + dz * dz
if dist_sq <= (2 * r) ** 2:
adj[i].append(j)
adj[j].append(i)
# BFS遍历
visited = [False] * n
top_set = set(top)
found = False
for start in bottom:
if visited[start]:
continue
queue = deque([start])
visited[start] = True
while queue:
node = queue.popleft()
if node in top_set:
found = True
break
for neighbor in adj[node]:
if not visited[neighbor]:
visited[neighbor] = True
queue.append(neighbor)
if found:
break
print("Yes" if found else "No")
if name == "main":
main()
这里空空如也
有帮助,赞一个