\( \def \ra {\rightarrow} \)
テレポータの行き先を超頂点 \(X \not\in N\) とおく. \(X\) を頂点として加えたグラフを考える. これにより,テレポータの行き先を保留した状態でグラフを構成できる. \(X\) の行き先を \(i\) としたいときは, コスト 0 の辺 \(i \rightarrow X\) を追加すればよい. すでにコスト 1の辺 \(i \rightarrow X\) があるかもしれないが, 最短経路を計算するときはコスト 0 の方が採用されるので,無駄な辺が残っていても問題ない.
各 \(i \in N \) に対して,テレポータの行き先を \(i\) としたときの \(0 \rightarrow N-1\) の最短コストを求めたい. 多くの計算は使いまわせそうなので,その方針でいく. \(i\) を固定して考える.
使いまわすために,最短経路を場合分けして求める. テレポータを使うか使わないかで場合分けするのだが, イメージとしては,
\(0 \ra X\)の近傍の頂点\(a \ra X\)の近傍の頂点\(b \ra N-1\)
というルート,または
\(0 \ra N-1\) をテレポータを使わないで行く
に分ける.
\(a = i\) のときは \(a \ra X\) のコストは 0, そうでなければ 1. \(X \ra b\) も同様.
この場合分けにより,計算を使いまわして求めることが出来る.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"