题目描述
小 w 伤心的走上了 Star way to heaven。
到天堂的道路是一个笛卡尔坐标系上一个 n*m 的长方形通道 顶点在 (0,0) 和 (n,m) 。
小 w 从最左边任意一点进入,从右边任意一点走到天堂,最左最右的距离为 n,上下边界距离为m 。
其中长方形有 k 个Star ,每个 Star 都有一个整点坐标,Star 的大小可以忽略不计。
每个 Star 以及长方形上下两个边缘宇宙的边界都有引力,所以为了成功到达 heaven 小 w 离他们越远越好。
请问小 w 走到终点的路径上,距离所有星星以及边界的最小距离最大值可以为多少?
额,这个题意比较清楚,就是这个小w很想去天堂,但是路上会有讨厌的星星,他想离这些星星越远越好,让我们求距离所有星星以及边界的最小距离最大值。
思路解析
一开始,我想的是把范围会重叠星星们放入一个并查集中,然后再用二分求答案。
然而,做到一半,我突然发现,万一几颗星星在同一个并查集并且它们的总半径恰好等于 m / 2 m/2 m/2 ,那这就意味着,它们直接把路给“堵”着,这道题就用二分做肯定会被卡掉😱。
后来觉得既然它在《最小生成树》里面,后来又想到了用Prim算法。原谅我太蒟蒻(逃
把边界加入集合,再用Prim跑最短路,找距离最小的点然后加入集合,将与之相连的点的距离更新。
直到我们最后添加第二个边界到集合中,这时我们就应该输出了,其实这时的最大值为恰好不能走过去时的最小 d i d_i di。
又:一定要注意一下 d o u b l e double double。
(实在不了解你可以看看代码嘛)
注释代码