バイトの競プロメモ

主に競技プログラミング

F - Grid and Tokens - AtCoder Beginner Contest 205

フローの張り方が分からなかった。

------------------------------------------------------

F - Grid and Tokens

問題

H*Wのグリッドがある

N個のコマで、i番目のコマについて

・指定された長方形領域のどこかに一つ置く

・置かない

のいずれかを選択できる。

ここで同じ列、行に二つ以上のコマを置けないとして

最大で何個のコマを置けるか。

------------------------------------------------------

制約

1<=H, W, N <= 100

--------------------------------------------

解法

複数の選択について相互に制約が生まれる場合は大抵フローな気がする、実際この問題はそうで

 

行と列を頂点として扱うと上手くいく。

そうするとイメージ的には、行hと列wを繋ぐ辺を選ぶと(h, w)にコマを置いたという様な感じだ。

行列を頂点として扱うのはLotus Leavesでもそうだったので典型かもしれない。

 

具体的には以下のように辺を貼ればいい(辺の流量はすべて1)

f:id:baitop:20220209231056p:plain

 

赤く囲った部分は1,2行目と2,3,4列目について

コマを置けるという事を意味する