keidaroo’s diary

底辺系競プロer

AGC15のC問題ほんのちょっとメモ

今更感半端なくてすみません。2完でした。
agc015.contest.atcoder.jp
これです。Cが分かりませんでした。

実装は(面倒くさいので(一番駄目な奴))していないのですが、やり方だけメモります。

一番初めの説明について

ぬすけ君は、N×M のグリッドを持っています。行には上から順に 1 から N、列には左から順に 1 から M の番号がついています。 グリッドの各マスは白か青かに塗られており、Si,j が 1 のとき i 行 j 列のマスは青マス、0 のとき白マスです。 青く塗られた任意の二つのマス a,b について、a からはじめて、現在いるマスから辺を共有する青いマスに進むことを繰り返して b に至るような経路のうち、同じマスを 2 度以上通らないようなものは、高々 1 通りです。 

ここの意味さっぱりだったのですが、解説動画みて、要するに
f:id:keidaroo:20170604170256p:plain
って感じです。一周しないってこと

その次

二次元累積和で青いマスの和をメモリましょう

最重要ポイント

この場合、一周しないということは、木なんですよ。
いや、たくさんあるから森なんですよ。(雑
木の特徴はね、頂点数が辺より一本少ないってことなんですよ
なので、頂点引く辺の数ってやればおけ

その次

辺の数を二次元累積和で求めましょう。
雑とか言わない

最終的に

頂点から辺の数を引きましょう

いや、この問題面白いですね。
ただ実装力的に時間内でできるかな?(なら実装しろ

雑ですみませんでした。
質問があれば気軽にtwitterの方へお願いします