华为OD机试2025C卷-发广播[100分](Java_Python3_C++_C语言_JsNode_Go)实现100%通过率

📅 2026/6/30 10:55:15
华为OD机试2025C卷-发广播[100分](Java_Python3_C++_C语言_JsNode_Go)实现100%通过率
文章目录前言一:题目描述题目名称题目内容输入描述输出描述示例二:解题思路解法一:DFS/BFS 染色(O(N²))解法二:并查集(O(N² · α(N)))最优解三:代码实现C++JavaPython3C语言JavaScript (Node.js)Go四:复杂度分析五:易错点坑1:浮点数精度问题坑2:坐标差可能溢出 int坑3:并查集路径压缩缺失导致超时坑4:C语言内存释放共勉前言给你 N 个广播站,每个站有一定的覆盖半径。如果两个站的距离小于等于它们的覆盖半径之和,它们就能互相通信。问最少需要启动几个广播站,才能让所有站都能互相通信(直接或间接)?——这其实是一道并查集裸题,读完题就能写。一:题目描述题目名称发广播题目内容某地有 N 个广播站,每个广播站 i 的坐标为(x_i, y_i),覆盖半径为r_i。如果两个广播站的距离 ≤ 它们的覆盖半径之和,则它们之间可以建立直接通信。通信可以中转(即如果 A 能和 B 通信,B 能和 C 通信,则 A 和 C 也能通信)。请你计算最少需要启动几个广播站,使得所有启动的广播站之间能够互相通信(直接或间接)。换一种说法:将广播站视为图的节点,能直接通信的站之间连一条边。求这个图的连通分量数量——每个连通分量选一个代表即可互相通信。输入描述