dist+[i]:=地点1から地点iへ移動する時の移動距離の総和の最小値
dist−[i]:=地点Nから地点iへ移動する時の移動距離の総和の最小値
とします.これらの配列の値はそれぞれ地点1,地点Nを始点とするDijkstraのアルゴリズムによって高速に求めることができます.
よって題意である「地点1から地点pjに移動し,地点pjから地点Nに移動し,地点Nから地点1に移動する時の移動距離の総和の最小値」は
各1≤j≤Kに対して
- min(dist+[pj]+dist−[pj])+dist−[1]
によって求めることができます.
問題全体としての時間計算量はO((N+M)logN+K)で,この問題の制約下では十分高速です.