G - Shortest Path 3 Editorial by evima

別解

次のような \(2N\) 頂点 \(N + 2M\) 辺の有向グラフ(辺にのみコストあり)を作ると、頂点 \(1_\text{in}\) から頂点 \(i_\text{out}\) までの経路の最小コストが求めるものです。

  • 元のグラフの各頂点 \(i\) に対し、二つの頂点 \(i_\text{in}\)\(i_\text{out}\) を作り、コスト \(A_i\) の有向辺 \(i_\text{in} \to i_\text{out}\) を張る。
  • 元のグラフの各辺 \(u \leftrightarrow v\) に対し、同コストの二本の有向辺 \(u_\text{out} \to v_\text{in}\)\(v_\text{out} \to u_\text{in}\) を張る。

この最小コストはダイクストラ法で \(O(M \log N)\) 時間で求められます。(公式解法より定数倍が大きいですが、この手法は他の用途にも使えます。)

posted:
last update: