Delete and Delete 2

2 secs 1024 MB
first_vil's icon first_vil

頂点 11 の子以外を削除対象として選ぶ必要はありません。

頂点 11 の子を順に c1,c2,,ckc_1,c_2,\dots,c_k とします。また、cic_i の子孫の深さの最大値をそれぞれ did_i とします。 すると問題は以下のように言い換えられます。

did_i のうち一つを選んで di:=di1d_i:=d_i-1 とした後、全ての did_i について di:=di1d_i:=d_i-1 とする」という操作を繰り返す。
max(d)0\max(d) \le 0 とするために必要な操作回数の最小値を求めよ。

言い換えた後の問題について操作回数 XX を固定し、XX 回の操作で目的が達成可能かを考えます。
結論としては i=1kmax(diX,0)X\displaystyle \sum_{i=1}^{k}\max(d_i-X,0) \le X であれば達成可能です。
XX について二分探索を行うか XX を徐々に増加させながら左辺を管理することで O(NlogN)O(N \log N) でこの問題を解くことができます。