ABC132 E問題:Hopscotch Addict

問題. Hopscotch Addict

有向グラフ  G = (V, A) と,頂点  S, T \in V が与えられる. S から  T への移動回数の最小値を求めよ.ただし,任意の頂点  v からの 1 回の移動とは, v から距離がちょうど 3 離れた頂点へ移動することである(弧重みは 1).また,  S から  T へ移動することができないときは -1 を出力せよ.

制約 2 \le N \le 10^5,  0 \le M \le \min(10^5, N (N - 1)) ( N = |V|, M = |A|

解法.最短経路問題

1 回の移動の定義が,距離がちょうど 3 ではなくちょうど1 離れた頂点へ移動することならば,この問題は有向グラフ上の最短経路問題である.ここでは,最短経路問題に帰着する.
頂点  v \in V に対して新たな頂点を  v_0, v_1, v_2 として,弧  (u, v) \in A に対して新たな弧  (u_0, v_1), (u_1, v_2), (u_2, v_0) を張った有向グラフ  G' を考える.考えいている問題は  G' 上で  S_0 から  T_0 への最短経路問題に等しく,最短距離は 3 で割った値となる.
弧重みは 1 なので幅優先探索で最短距離を求めることができ, G' の頂点数と弧数はそれぞれ  3 |V|, 3 |A| と定数倍にしかならないので計算時間は  O(N + M) である.

計算時間 O(N + M)

AOJによくある問題なので解けた.AtCoder で拡張グラフ上の最短経路問題を出すの珍しい.