N - 何かグラフの問題 解説 by maspy


\(T\) を固定して、\((a_v)\) の存在を判定する問題を考えると、これは「最短路問題の双対」という有名問題になります。

参考資料

最短路問題の双対(判定問題)

\(p_v\leq p_u + x_{uv}\) という条件がたくさん与えられて、全てを満たす実数列 \((p_v)_v\) の存在判定を考えます。これは、次のようにして解けます。

  • \(u\) から \(v\) に向かう重み \(x_{uv}\) の有向辺をはり、有向グラフ \(G\) を作る
  • \((p_v)_v\) の存在と、\(G\) に負閉路が存在しないことは同値である。
  • したがって、解の存在は Bellman–Ford algorithm により判定できる。

実際、負閉路が存在すれば解が存在しないことはすぐに分かります(負閉路に沿った不等式の列を考えてみましょう)。 負閉路が存在しないとして、\((p_v)_v\) を構成します。まず、グラフ \(G\) に適当な super node \(S\) を追加して、\(S\) から各頂点へ重み \(0\) の辺を張ります。そのあと、\(S\) から \(v\) への最短路長を \(p_v\) とすれば、条件を満たします。

本問題の解法

\(T\) を固定した判定問題を解きます。 「固定されている値」を除いて考え、固定されていない値 \(p_v\) に対する条件に書き直すと、与えられる不等式は次の 形の 3 種です。

  • \(p_u \leq p_w + x\)
  • \(0 \leq p_w + x\)
  • \(p_u \leq x\)

\(p_0 = 0\) とした場合、これらの制約は全て \(p_u\leq p_w + x\) の形で表すことができます。

\(p_u\leq p_w + x\) の形の差分制約の解は、すべての \(p_v\) に定数を加算することで、\(p_0 = 0\) という条件を追加しても存在性は保たれます。よって、\(p_0 = 0\) とした場合の制約を追加することは妥当です。

以上のグラフ構築、 Bellman–Ford algorithm による解の存在判定を二分探索の中で行うことで、最適な \(T\) を求めることができます。

投稿日時:
最終更新: