Official

E - Yet Another Minimization Editorial by maroonrk_admin


問題をグラフの最小カットとして定式化します.

まず,グラフの始点 \(S\) と終点 \(T\) を用意します.

\(1 \leq i \leq N\) について,長さ \(M\) のパスを用意し,それを \(S=V_{i,0} \to V_{i,1} \to \cdots \to V_{i,M}=T\) とします. 各 \(1 \leq k \leq M\) について \(V_{i,k} \to V_{i,k-1}\) に容量 \(\infty\) の辺を貼ることで,\(V_{i,k}\) は最初のいくつかがカットの \(S\) 側,残りが \(T\) 側,という形になります.

\(V_{i,k-1}\)\(V_{i,k}\) の間でカットすることと,\(A_{i,k}\) を選ぶことを対応させます. \(V_{i,k-1} \to V_{i,k}\) に容量 \(C_{i,k}\) の辺を貼ることで,\(A_{i,k}\) を選ぶコストを表現することができます.

次に,\(|x_i-x_j| \times W_{i,j}\) のコストに対応する辺を追加します. このコストは,以下のように言い換えることができます.

  • 各整数 \(a\) について以下のコストがかかる
    • \(x_i \leq a\) かつ \(a+1 \leq x_j\) なら \(W_{i,j}\) のコスト
    • \(x_j \leq a\) かつ \(a+1 \leq x_i\) なら \(W_{i,j}\) のコスト

\(x_i \leq a\) かつ \(a+1 \leq x_j\)」という条件は,適切な \(0 \leq p,q \leq M\) を用いて,「\(V_{i,p}\) がカットの \(T\) 側かつ \(V_{j,q}\) がカットの \(S\) 側」と言い換えることができます.よって \(V_{j,q} \to V_{i,p}\) に容量 \(W_{i,j}\) の辺を貼ることでこの条件に対応するコストを表現できます.

同じ \(p,q\) を使う \(a\) をまとめることで,ひとつの組 \((i,j)\) に対し,追加すべき辺は \(O(M)\) 本になります.

これでグラフを作ることができたので,あとはこれの最小カット\(=\)最大流を求めればよいです.

このグラフの頂点数は \(O(NM)\),辺数は \(O(N^2M)\) なので,Dinic のアルゴリズムを使うことで,\(O(N^4M^3)\) 時間でこの問題は解けます.

posted:
last update: