最小カットは最大フロー

良く忘れるのでメモ(使わないとどっちが最小か忘れる)

使った問題(解説AC)
Submission #41137764 - Denso Create Programming Contest 2022(AtCoder Beginner Contest 239)


学んだこと

頂点のカット(頂点を消す、到達不可にする)は最小カットで考えにくいので、1頂点を入る/出る用の2頂点に分割して考える。

AtCoderLibraryでmf_graph.flow(start, goal)した後に、mf_graph.min_cut(start)をすると、最小カットした後の集合(start側の頂点がtrue)が得られる

min_cutは
”長さnのvectorを返す。i 番目の要素には、頂点 s から i へ残余グラフで到達可能なとき、またその時のみ true を返す。flow(s, t)をflow_limitなしでちょうど一回呼んだ後に呼ぶと、返り値は s, t 間のmincutに対応します。”
らしいけど、これでなんでmincutに対応するのかちゃんとわかってない(イメージ的にはわかる)ので、これも後で勉強。