问题描述
在一个标记为1 .... N的城镇中有[N]个位置。系统会为您提供一条街道S(| S | = M)的列表,其中一条街道连接了城镇中的两个位置,并且具有关联的距离。您还提供了城镇中房屋的清单H
和城镇中所有COVID-19测试中心的清单C。对于每个房屋,到最近的测试中心的距离最短。解决O(M * log N)时间的问题。
我看到这是一个图形问题,我可以从街道列表中构建无向图,因为可以将街道视为一条边缘,其中权重是两个位置之间的距离。
因为该问题想找到所有房屋到测试中心的最短距离,所以我想为H中的每个房屋运行Dijkstra算法。但是,这将使我的运行时间为O(| H | * MlogN)和我们想要一个O(MlognN)的运行时。为了实现此运行时间,是否可以对Dijkstra的算法进行任何修改?我必须将每个房屋都视为源顶点才能找到最短的距离,但我看不出在所需的时间复杂度中可以采取的任何方法。
解决方法
使用从每个中心而不是房屋初始化的Dijkstra。
将所有房屋标记为未访问,将所有中心标记为0
将所有中心添加到PQ。
继续dijkstra ...