2017-04-19 1 views
1

문제 설명 : 솔루션의 https://www.hackerrank.com/challenges/jack-goes-to-rapture: Dijsktras 수정 잭이 휴거 직관에 간다,

하나는 사용이 다 익스트라의 알고리즘을 수정합니다.

가 원본 :

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 

내가 고도 = 최대 뒤에 직관을 얻을 수 아니다 (체중 거리 (유) (유, v)를)하는가이다 최단 경로에서 가장자리의 최대 무게.

누군가 해결책에 대한 직감을 설명해 줄 수 있습니까?

답변

2

A 역에서 B 역으로 여행하는 승객은 A에서 B까지의 운임과 A 역에 도착하기 위해 지불 한 누적 운임 간의 차이 만 지불해야합니다 [운임 (A, B) - A 역에 도착하는 총 운임. 차이가 음수이면 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))

+0

입니다. 감사합니다. 이 최소 최대 단순화를위한 표준 용어가 있습니까? – Abhishek

+0

단순화에 대해 모르겠지만이 문제 (약간 수정 됨)는 표준 이름을가집니다. [wiki] (https://en.wikipedia.org/wiki/Widest_path_problem)에서 : "밀접한 관련 문제 인 ** 미니 맥스 경로 문제 **는 가장자리의 최대 무게를 최소화하는 경로를 묻습니다. " – DAle