Hackerrank:杰克去了Rapture Intuition,修改了Dijsktras

时间:2017-04-19 11:02:43

标签: algorithm dijkstra

问题陈述:https://www.hackerrank.com/challenges/jack-goes-to-rapture

其中一个解决方案是使用改进的Dijkstra算法。

原件:

For a vertex u,
Forall vertices v, instead of updating the distance by,
alt = distance(u) + weight(u, v)
if(alt < distance(v)) distance(v) = alt

修改:

For a vertex u,
Forall vertices v, instead of updating the distance by,
alt = max(distance(u), weight(u, v))
if(alt < distance(v)) distance(v) = alt

我无法获得alt = max(距离(u),重量(u,v))背后的直觉,这是最短路径中边缘的最大权重。

有人可以解释解决方案背后的直觉。

1 个答案:

答案 0 :(得分:2)

  

如果乘客从A站前往B站,他只需支付A到B的票价与他到达A站的累计​​票价之间的差额[票价(A,B) - 总票价到达A站。如果差异为负,他可以免费从A到B旅行。

因此,边缘(A,B)的实际权重为max(0, fare(A, B) - min_distance(A))。所以累积距离将是:

min_distance(A) + max(0, fare(A, B) - min_distance(A)) = max(min_distance(A), fare(A, B))