tokizo

競技プログラミングの備忘録や日記

エイシングプログラミングコンテスト2019-C Alternating Path

以前解説ACしたものを自力で解いた

問題概要

#, .のみで構成されるグリッドにおいて、#.を交互に渡る経路はいくつあるか
ただし始点は#, 終点は.とする

解法

DFSとUnion Findで.#で交互に渡ることのできるエリアをグループにする
以下は入力例1の場合
f:id:fawula:20190417003830p:plain

#からいける.の数の総和が答えなので連想配列を使ってグループにおける#の個数を記録

(グループの大きさ - #の数) * (#の数)でグループの#が到達することのできる.の数が算出できる

コード

atcoder.jp