かしのブログ

競技プログラミングとか

AtCoder Regular Contest 074 F - Lotus Leaves

問題

グリッド上の池に葉がいくつか浮かんでいる。カエルは、同じ行/列にある葉を好きに行き来できる。葉 S, Tを行き来できなくするよう、 S, T以外の除く時の最小枚数を求める。

atcoder.jp

考察

 Sからたどり着ける葉の集合 \mathcal{S}と、葉 Tからたどり着ける葉の集合 \mathcal{T}が互いに共通部分を持たないようにしたい。  \mathcal{S}に属する葉と \mathcal{T}に属する葉が同じ行や列にあると、互いに行き来できてしまうので、どちらかを取り除いて、その行/列に属するのは \mathcal{S}ないし \mathcal{T}だけという状況を作り出せばよいことがわかる。 各行/列を頂点として、葉を行と列を結ぶ辺(容量1)とみなすと、より除く葉は S-Tの最小カットと等しいことがわかる。

実装

atcoder.jp