人間だけど競プロやる

解けなかった問題を理解できたら記事を投稿します。日本語の解説が見つからなかったもの中心。

Educational Codeforces Round 103 (Rated for Div. 2) D. Journey


気づき

  • 開始位置に戻ることができる
  • 偶数ターンで訪れた頂点に奇数ターンに訪れることは出来ない


道路の進行方向が毎ターン切り替わるので、一つ進むと、次のターンに一つ戻ることができる。
また、どの頂点も行って戻るのに2 \times a(aは進んだ街の数)ターンかかるので、偶奇が変わらい。
これらから、あるターンに偶数ターンに訪れた頂点に奇数ターンに訪れることは出来ないし、逆も同じ。
よって偶数ターンに訪れる頂点と奇数ターンに訪れる頂点は区別して良い。

解法
偶数ターンと奇数ターンの頂点を別の頂点としてグラフを作る。
偶数ターンは0からN、奇数ターンはN+1から2 \times N + 2とする。
(ややこしいが、頂点iのとき偶数ターンは頂点i、奇数ターンは頂点(i+(N+1)+5)とかにすればよい(+5は事故をさけてる))
偶数ターンに任意の頂点を出発することにして、奇数ターンの頂点と双方向に辺を結ぶ(1ターン後には道が切り替わって戻ることができる)。
こうして用意したグラフを用いて、UnionFindやDPを用いて、任意の頂点から訪れることができる頂点数を数える。

f:id:bqn2:20210204112252p:plain
fig.1

この方法でAC。

(翻訳サービスに投げたら文章落っことされて迷った)
(英語読んで存在しない条件を想像してしまった)
(出発は偶奇どちらでも良いと勘違いした)