Official
E - A Gift From the Stars Editorial by nok0
\(T\) のグラフで葉である頂点は、はじめの星においても葉です。また、そのような頂点から \(T\) 上で距離が \(2\) 以下の頂点が同じ星に属します。このことから、以下のアルゴリズムが考えられます。
- \(T\) で葉の頂点を一つ選ぶ。
- 選んだ頂点から距離が \(2\) 以下の頂点の個数(自分含む)を数える。頂点の個数が \(x\) 個のとき、レベル \(x-1\) の星があったことがわかる。
- 数えた頂点および隣接する辺を \(T\) から削除する。
これを、\(T\) の頂点がなくなるまで繰り返すと、答えが得られます。これは適切な実装のもと \(\mathrm{O}(N)\) で動作しますが、些か実装が面倒です。ここでは、簡単な考察のもと実装を楽にする方法を説明します。
以下の補題が成立します。
- 元の星で葉でない頂点を中心とよぶ。\(T\) において、中心同士の距離は必ず \(3\) の倍数であり、中心と葉の距離は必ず \(3\) の倍数ではない。
これは帰納法により示せます。この補題を用いると、以下のアルゴリズムが考えられます。
- \(T\) の中で、元の星で中心であった頂点を一つ選ぶ。これは、\(T\) の葉と結ばれた頂点を選べばよい。
- 選んだ頂点からの最短距離を各頂点について求める。
- 最短距離が \(3\) の倍数であるような各頂点について、その頂点の次数を \(L\) に追加する。
このアルゴリズムは、 bfs または dfs 等により簡単に実装できて、 \(\mathrm{O}(N)\) で動作します。
posted:
last update: