Skip to content

【欧拉序】CF1192B Dynamic Diameter 笔记 ​

欧拉序:访问一个节点的子树后,将这个节点的父亲加入 DFS 序的末尾构成的序列 E。

性质:

  • 设 El=u,Er=v,若 x 满足 depx=mini=lrdepi,则 x=LCA(u,v)。
    • 由于 u,v 分属于 x 的不同子树,因此 x 至少会在访问完 u 所在子树之后加入序列;而 u,v 同属 fa(x) 的子树,因此 x 的祖先不会出现在 E[l,r]。
  • 与 DFS 序一样,一个子树内的全部节点位于序列上一段连续的区间。

回到本题,求直径相当于求 maxu,v(depu+depv−2depLCA(u,v)),变换为欧拉序之后,相当于要在序列上找到 l<mid<r,使得 depEl+depEr−2depEmid 最大,由于 LCA 是 [l,r] 中深度最小的,因此总是能成为最优的 mid。

接着变为经典线段树问题,push_up 时只需考虑跨过区间,即 l,mid 来自一边,r 来自另一边;或 l 来自一边,mid,r 来自另一边的情况。因此还需要分别维护区间内 depEl−2depEmid、depEl−2depEmid 的最大值。

修改一条边即为增加一个子树内的深度,时间复杂度 O(nlog⁡n),空间复杂度 O(n)。

最近更新