No.1393 Median of Walk 解説

まだ一般公開されていません。 2021-02-12 23:20:00 +0900 JSTに公開される予定です。 ACを取っていると見ることが出来ます。

解説

まずは頂点 11 から頂点 ii への歩道であって median(p)x\mathrm{median}(p)\leq x が成り立つようなものが存在するか、という判定問題を考えます。

これは重みが xx 以下の辺のコストを 1-1 、重みが xx より大きい辺のコストを 11 としたグラフにおいて最短経路問題を解き、頂点 ii への最短経路長が 00 以下かで判定できます。

なので重みが小さいものからコストを 1-1 に変更していき、頂点 ii までの最短経路長がはじめて 00 以下になったタイミングを求めることで median(p)\mathrm{median}(p) の最小値がわかります。

ここまでの考え方に基づき、最短経路問題をベルマンフォード法などで解くようにすると O(NM2)O(NM^2) で答えが得られます。

これだと間に合わないので、最短経路長の変化に着目して計算量を小さくできないか考えましょう。

各頂点への最短経路長としてありうる値としては以下の 33 種類に分類できます。

  • パスが存在しない(\infty
  • 最短経路長が存在し、最短経路は単純パス(N-N ~ NN
  • 負閉路を含むパスが存在する(-\infty

また、コストを変更していく中での最短経路長は明らかに単調減少します。

よって各頂点 vv について、頂点 11 から頂点 vv への最短経路長が変化するのは全体を通して O(N)O(N) 回なので、「ある頂点 vv で最短経路長が更新された場合、次の頂点で最短経路長が更新されるか確認する。更新される場合のみ遷移する。」 という dfs を行うことで、最短経路長は全体を通して O(NM+N2)O(NM+N^2) で更新できます。

最短経路長を更新する際は、N-N 以下になった場合に -\infty に更新するようにすると dfs 終了後に最短経路長は正しく更新されています。

以上よりこの問題は O(NM+N2)O(NM+N^2) で解けました。

他の解説ページへのリンク

このリンクは、ユーザーが自由に登録できるため、Writerが追加しているわけではありません。
以下のいずれかに該当するページは削除対象ですので、見つけたら報告のご協力をお願いします
将来yukicoder上でも削除申請機能を提供したいです。

  • 問題に関係ないページ
  • 問題・解説に対して、不快な文面(不快の定義は難しいので、難しい場合はアンケートなどを取る可能性はあります)

chineristACさんが、このページの解説文を書きました。