想定解は二分探索 + 重心分解です。
重心分解についての説明
類題
「となるが個以上存在するか」という判定問題を考えます。
この判定問題は、について単調性があるため、二分探索が使えます。判定問題の答えがYesとなるような最小のがこの問題の答えです。
よって、この問題は、となるの数え上げに帰着されます。
この計算に重心分解を用います。重心を1つ選び、長さ以下であって、重心を通るパスの数を数えます。
重心を始点として、bfs or dfsを行い、各頂点までの距離を計算します。を重心から頂点までの距離とします。
かつ となるようなの数を数えます。これは各をソートした列に対する尺取り法 or 二分探索で計算出来ます。
このままでは、重心を通らないようなパスについても数えているため、重心を取り除いた時に同じ部分木に属するであって、
かつ となるようなの数を引きます。
これによって、長さ以下で、重心を通るパスの数の計算が出来ました。重心を取り除いて出来る各部分木についても再帰的に数え上げを行います。
二分探索の判定部分で、毎回重心分解をし、のソートを行うと計算量は、になりますが、
初めに重心分解を1度だけしておき、のソート結果を保持した状態で、二分探索をすることで、計算量をにすることが出来ます。