dist+[i]:=dist_+[i]:=地点11から地点iiへ移動する時の移動距離の総和の最小値
dist[i]:=dist_-[i]:=地点NNから地点iiへ移動する時の移動距離の総和の最小値
とします.これらの配列の値はそれぞれ地点11,地点NNを始点とするDijkstraのアルゴリズムによって高速に求めることができます.

よって題意である「地点11から地点pjp_jに移動し,地点pjp_jから地点NNに移動し,地点NNから地点11に移動する時の移動距離の総和の最小値」は 各1jK1 \leq j \leq Kに対して

  • min(dist+[pj]+dist[pj])+dist[1] \min (dist_+[p_j] + dist_-[p_j]) + dist_-[1]

によって求めることができます.

問題全体としての時間計算量はO((N+M)logN+K)O( (N+M) \log N + K)で,この問題の制約下では十分高速です.