luogu 1099 / bzoj 1999

原题链接

题意

给定1棵无根树,树边有正边权。

点路距\(D(u,F)\):最小化点点距

偏心距\(ECC(F)\):最大化点路距

现在限制\(F\)属于原树直径,且\(F\)的长度小于等于\(s\),求最小化偏心距。

对于\(30\)%的数据,\(5 \leq n \leq 300\)

对于\(100\)%的数据,\(5 \leq n \leq 5 \times 10^5\)

题解

这是什么神仙毒瘤题!

暴力选手:

限制\(F\)属于原树直径?原树直径这么多条,难道逐一找出再做?

干脆直接枚举\(F\)的两端点,并将\(F\)上节点标记为不可访问。从两端点进行\(DFS\)求得最长距离即可判定能否得到直径。若能得到直径,则求偏心距。

偏心距是最大的点路距,而点路距的本质是该点到该路径上,既不经过重复的边也不经过该路径上的边,故可以转化成从该路径上的节点向外\(DFS\)得到。时间复杂度:\(O(n^3)\)


优秀选手:

原树直径有多条不好做?我先来大胆猜想一发,考虑任意一条直径都是等价的。

证明?读者自证不难

性质1,1棵树中,任意两条直径都是相交的

假设两条直径不相交,一定存在某条简单路径将两条直径连起来。形如此:

KylenU.png

选择其中最长的两条分链加上用于连接的简单路径,会得到一条更长的直径,与假设矛盾。

性质2,各条直径在不相交的两端,长度分别相等(感谢::Dash::

考虑两条直径AB和CD,它们的重叠部分为EF。

Ky3ImT.png

直径最长,新的组合长度不能超过直径长度。因此\(DF = BF,AE = EC\)

推论:在任意一条直径上求最小偏心距都是等价的

偏心距的定义为所有点到已选定路径的距离最大值。本质上是路径上各点到非路径上各点的距离最大值。

根据直径的最长性,偏心距为路径上的点到直径端点的距离的最大值。

当选取的路径不包含公共部分时,偏心距即为该路径所在的直径端点到该路径端点距离的较大值。举个栗子,若在\(AE\)上取点\(P,Q\),则偏心距为\(BQ > BF\);若在\(BF\)上取点\(P,Q\),则偏心距为\(AP > AE\)

当选取的路径包含公共部分时,举个栗子,\(CE\)上取点\(P\)\(DF\)上取点\(Q\),那么偏心距为\(max(AE,BF)\)。同理,在\(AE\)上取点\(P\)\(BF\)上取点\(Q\)时,偏心距为\(max(CE,DF)\)。根据\(AE = CE\)\(BF = DF\),无论端点取在哪一条直径上,偏心距都相等。

两种情况进行比对,由于\(BQ > BF\)\(AP > AE\),不包含公共部分的情况一定不优,即使枚举了也不可能纳入最优解中。真正纳入最优解的包含公共部分的情况偏心距又相等,因此在任意一条直径上求最小偏心距都是等价的。

由上述论证也可以发现,假设我们固定路径在直径上的左端点,那么右端点离左端点越远越好。枚举路径左端点,求出路径长度在\(s\)之内时的最右端点,再\(DFS\)计算偏心距即可。时间复杂度\(O(n^2)\)

猜你喜欢

转载自www.cnblogs.com/littlewyy/p/11749496.html