Kazun の競プロ記録

競技プログラミングに関する様々な話題を執筆します.

AtCoder Beginner Contest 303 E問題 A Gift From the Stars

問題

atcoder.jp

提出解答

atcoder.jp

問題の概要

 k \geq 2 に対して,  (k+1) 頂点からなるスターグラフをレベル  k の星という.

いくつかの星の直和からなるグラフに対して, 以下の操作を繰り返し行い, 連結になるようにした.

  • 次数が  1 であり, 互いに非連結であるような  2 つの頂点を選び, その頂点間を結ぶ辺を追加する.

その後, 各頂点に対して,  1 から  N までの番号をつけた.

このグラフ  T=(V,E) は木になり, 次のようになっていた.

  •  V=\{1,2, \dots, N\}
  •  E=\{u_j v_j \mid j=1,2, \dots, N-1\}

最初の状態における星の状態を求めよ.

制約

  •  3 \leq N \leq 2 \times 10^5
  •  T は木

解法

 T は木であるので, 葉が存在する. その葉を  x とする. すると,  x に接続する唯一の頂点  y は星の中心になっている. また,  y の次数は  2 以上であり,  y を中心とする星のレベルは  y の次数と一致する.

これにより,  y を中心とする星が確定したので,  y 及び,  y に接続する全ての頂点を削除することによって, 頂点数が小さい問題に帰着することができた.

これを繰り返して行くことにより, 全ての星の情報を求めることができた.

なお, 頂点を削除するとき, 削除する頂点に接続する星の中心ではない頂点が新たに葉になることに注意すること.

時間計算量は  O(N) 時間である.

※ なお, 実際の問題はレベルを昇順に並べる必要があり, ソートがボトルネックになって,  O(N \log N) 時間になる.