G - Jumping Takahashi 2 解説 by cirno3153


\(O(N^2 \log S)\) で解きます。

答えを \(X\) に決め打ったとします。 すると、 \(P_i X \geq |x_i - x_j| + |y_i - y_j|\) を満たす全ての組 \((i, j)\) に辺を貼った有向グラフ \(G\) ができます。

このグラフを強連結成分分解し、各強連結成分ごとに辺を貼りなおします。 すなわち、 \(f(i)\)\(i\) が属する強連結成分の番号としたとき、元のグラフ \(G\) 上で \((i, j)\) 上に辺が存在するならば、新たなグラフ \(G'\) 上で \((f(i), f(j))\) 上に辺が存在するようにします。

\(G'\) は強連結成分分解したグラフなのでDAGであり、仮に全ての頂点に辿り着けるような始点が存在するならば必ず頂点 \(0\) から全ての頂点に辿り着けます。

強連結成分分解、 \(G'\) 上での幅優先探索のどちらも \(O(N^2)\) なので、計算量は \(O(N^2 \log S)\) です。

なお、 \(G'\) を構築せずとも単に最も上の強連結成分を適当に一つ取って始点としても良いです。

投稿日時:
最終更新: