noshi91のメモ

データ構造のある風景

単純な最小カットで表現できる条件

変数  x , y への  0 , 1 の割り当てに対してコストが以下の図のようになるとします。

f:id:noshi91:20191220161354j:plain

コストを最小化するとき、 A + D \le B + C ならば最小カットで表現できます。

説明

最小カットで使えるプリミティブな操作を考えます

f:id:noshi91:20191220222121j:plain

また、解に直接値を加えることで全体に  +c,-c することが出来ます。
 A+D-B-C を考えると、 x \rightarrow y , y \rightarrow x の辺で減少し、それ以外では変化しません。 よってこれらの辺で表現できる必要条件  A + D \le B + C が得られます。 一方これが実際に構築可能であることもすぐに示せます。

変数の反転

一方の変数を反転することを考えると不等号が逆のものが表現できます。 よってそのままでは表現できなくても、変数をいくらか反転すると表現可能となる可能性があります。

  •  A + D \lt B + C
     x , y の反転は一致する必要があります
  •  A + D = B + C
    反転の有無に関係なく表現可能です
  •  A + D \gt B + C
     x , y の反転が異なる必要があります

yukicoder 957 植林

行と列が変数です。その列/行一帯を植林することを  1 とします。 すると 2 変数が関わり合う部分のコストは以下のようになります。

f:id:noshi91:20191220184226j:plain

行か列のいずれかを植えることにしたらそのマスは費用を払う必要がある、という意味です。 これは  A + D \le B + C を満たすことが  G_{i,j} \geq 0 から分かり、表現可能です。