JOI夏季セミナーに通りました

JOI夏季セミナーに通りました。JOI公式ホームページによると倍率3.9倍だったらしいので嬉しいです。 申し込みは2017年と2019年の2回行い、今回が初めての通過です。

ところで、非春合宿erで通過したのが10人らしいですがまだ自分含め5人しか見つけていないので少し心配になっています......

スペースが余ったので最近解いた問題について書きます。

AGC005-C Tree Restoring

問題概要

数列{A_i}が与えられるので、各頂点からの最遠点がA_iであるような木が存在するか判定せよ。

atcoder.jp

解法

木の直径に注目するときれいに解けます。 頂点P→QとQ→Pの距離は等しいので、A_iの最大値と同じ値を持つ要素は少なくとも2つあるはずです。そうでなければ答えはNoです。 ここで、A_iの最大値をMと置きます。 さて、このパスを考えると、パス上の頂点について距離は{M, M-1, M-2... M/2 , ... M-1, M}となるはずです。このようなパスが構築できなければNoです。 ここから、残った頂点をパスに併合します。最遠点がDになるような頂点はパス上の距離D-1の頂点につなぐと条件を満たします。そのような頂点がなければNoです。

あとはこれをイイ感じに確かめればよいです。

解答

atcoder.jp