Core树网的核
ECC(F) 一定和直径的两个端点有关。因为任意节点 x 的最远点一定是两个端点之一。
不妨设直径上的点 x 到直径两端的距离的较小值为 f_x , x 到非直径点的最大距离为 g_x。那么 f_x>=g_x,否则和直径的最大性矛盾。
现在我们对每个直径上的节点求出 g_x。容易发现两端点的贡献就是到左右端点的距离。然后发现,路径两端的节点l,r的贡献一定大于 g_x,x 不在路径上。
注意对于路径中间的节点t,有可能 g_t>max(f_l,f_r),因为 g_t<=f_t,f_t可能比两个端点大。
那么记录一个全局变量 res,每次取 res 和 l,r 贡献的最大值即可。
时间复杂度 O(n)。