ABC 068 C問題 Cat Snuke and a Voyage

問題

C - Cat Snuke and a Voyage

考察の流れ

高橋キングダム島ありすぎワロタ (3 \leq N \leq 2×105

グラフを使ってあれやこれやする感じなのかな…?と思いかけたけどよくよく見ると島1から島Nまで,どこか一つの島Xを経由していけるなら構わないということになる.

愚直にやろうとすると島1から定期便で行ける島全てに対して,さらにその島から行ける島全てを見て,その中に島Nがあるか調べればいい.これはO(N2)で,島多すぎワロタなので間に合わない.

計算量を落とす方法を考えなくてはいけなくなった…が,前記事ABC 073 C問題 Write and Erase - おふとん王国でsetを復習してたこともあり,setを使えないかと考える.

入力を受け取るときに,島1,島Nへの定期便がある島をそれぞれsetで持っておいて,各setに共通要素がないか見ていけばいい.

島1に行ける島のsetから全部要素を取り出し(O(N)),その要素が島Nに行ける島のsetにあるか調べる(O(log N))ようにすれば,計算量はO(N log N)で間に合わせることができる.

コード

Submission #2799428 - AtCoder Beginner Contest 068

1発AC 所要時間20minくらい

反省

  • 解説を見たところ…なるほど,辺の情報をハッシュマップに入れてしまえばO(1)で行けますね やはりデータ構造は弱いので,復習しておこう…
  • とはいえ確実に通せる解法で通せたのは良かった.
  • 今回はグラフのアルゴリズムは使わなくてもOKだったけど,せっかくなのでグラフの復習もしておく.