regions - 地域 (Regions) Editorial by noimi


解を二分探索します。

直径を \(x\) 以下にできるかを木 dp によって判定します。

木 dp では、子供以下の集合において最も遠い頂点までの距離を記録します。

どの 2 つの距離の和も \(x\) を超えないように一部の辺を切ります。

これは、距離の集合をソートして後ろ二つの和が \(x\) を超える限り切っていけば良いです。

よって、\(O(N \log N \log CN)\) で答えが求まりました。

ところで、この問題は \(O(N \log CN)\) で解くこともできます。

距離の集合をソートするパートをより効率的に解くことができます。

\(y = ceil(x / 2)\) を超える距離は高々一つ、\(y\) 未満のものはいくつあってもよいという事実に着目することで、\(y\) 以上の最小値、\(y\) 未満の最大値を求めて場合分けすればよいです。

posted:
last update: