AtCoder Beginner Contest 259 G問題 Grid Card Game
問題
提出解答
問題の概要
行 列のグリッドがあり, 各マスには整数が書かれたカードがある. 上から 行目, 左から 列目にあるカードに書かれている整数は である.
高橋君と青木君は次のゲームを行う.
- 高橋君は 個ある行のうちいくつかの行を選び, その選んだ行それぞれにあるカードの上に赤いコマを置く.
- 青木君は 個ある列のうちいくつかの列を選び, その選んだ列それぞれにあるカードの上に青いコマを置く.
- その後, 次のようにして得点を決定する.
- 赤いコマと青いコマの両方が置かれており, 負の整数が書かれているカードが存在するならば, 得点は 点.
- 上記のようなカードが存在しない場合は1つでもコマが置かれているカードに書かれている整数の総和がそのまま得点になる.
可能な得点の最大値を求めよ.
制約
解法
まず, なにもコマを置かない場合が 点なので, 点が最大値になることはない. よって, 点に関するルールを次のようにしてもよい.
- 負の整数が書かれているカードには赤いコマと青いコマの両方を置いてはいけない.
をそれぞれ 行目全体を表す集合, 列目全体を表す集合とし, とする.
このとき, を から への写像全体の集合としたとき, を に対して, 以下で定める.
- . ただし, とする.
はそれぞれ 行目, 列目を選ぶことを意味し, はそれぞれ 行目, 列目を選ばないことを意味する.
ここで, を に対して以下で定める.
このとき, は全単射であり, 各 は
である. このような形に変形すると, 最大フローを利用する最小カット問題に帰着できる.
よって, 最大フロー問題を解くことにより, として時間計算量 で解くことができた.