ARC074 F問題:Lotus Leaves

問題. Lotus Leaves

 H 行,横  W 列の長方形の池がある.池にはいくつか蓮の葉が浮かんでおり,同じ行または列にある葉へは双方向に移動可能である.カエルが葉  S から  T へ移動しようとしている.葉  S, T 以外の葉を取り除くことによって  S から  T へ到達できなくなるかを判定し,到達不可能ならば取り除く葉の最小値を求めよ.

制約 2 \le H, W \le 100

解法. 最小カット問題

 R = \{r_1, \ldots, r_H\}, C = \{c_1, \ldots, c_W\} としたとき,頂点集合を  V = R \cup C \cup \{s, t\} として, (i, j) にある蓮の葉に対して,容量1の辺  \{r_i, c_j\} を加える.また,'S' と 'T' がそれぞれ  (i_s, j_s), (i_t, j_t) にあるとき,容量無限大の辺  \{s, r_{i_s}\}, \{s, c_{j_s}\}, \{r_{i_t}, t\}, \{c_{j_t}, t\} を加える.答えは  s-t 最小カットである.'S' と 'T' が同じ行または列にあるときどのようにしても到達可能となる.このとき,無限大を適切な値に設定しないとオーバーフローするので注意が必要.

計算時間 O(H^3 W + H^2 W^2 + W^3 H) (Dinic法を使用)

まとめ

巨人の肩の上に立つような問題