倍增/线段树维护树的直径 hdu5993/2016icpc青岛L

Posted ytytzzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了倍增/线段树维护树的直径 hdu5993/2016icpc青岛L相关的知识,希望对你有一定的参考价值。

题意:

给一棵树,每次询问删掉两条边,问剩下的三棵树的最大直径

点10W,询问10W,询问相互独立

 

Solution:

考虑线段树/倍增维护数的直径

考虑dfs序的一个区间 [l, r] 是联通的

而我们知道了有 l <= k < r,

且知道 [l, k] 和 [k + 1, r] 两个区间的直径端点及长度

假设两个区间的直径端点分别为 (l1, r1) 和 (l2, r2)

那么 [l, r] 这个区间的直径长度为

dis(l1, r1) dis(l1, l1)  dis(l1, r2)

dis(r1, l2) dis(r1, r2) dis(l2, r2)

六个值中的最大值

 

证明:

假设两个区间是通过边 (u, v) 联通的

且点 u 属于前一个区间,点 v 属于后一个区间

1) 如果新区间的直径不经过这条边

    那么新区间直径就是 max(dis(l1, r1), dis(l2, r2))

2) 新区间的直径经过这条边

    考虑 v 到后一个区间的点的最长距离

 一定是到 l2 和 r2 两个点其中一个点的距离(树的直径的定义)

    u 到前一个区间的点的最长距离同理

    所以枚举四种情况即可

 

一个问题:

倍增/线段树维护的过程中,某个区间可能并不是联通的

那么继续进行上面的合并还能保证正确意义吗?

我们只要保证查询的区间是联通的,那么在这个区间查询的意义下

包含的每个区间都是有意义的,因为两个不连通的区间的LCA一定在查询区间里

这样合并的正确意义也就有保证了

以上是关于倍增/线段树维护树的直径 hdu5993/2016icpc青岛L的主要内容,如果未能解决你的问题,请参考以下文章

HDU4117 GRE WORDS(AC自动机+线段树维护fail树的dfs序)

hdu4605

2021.7.14提高B组模拟3T1 树的直径(lca)(倍增)

求树的直径+并查集(bfs,dfs都可以)hdu4514

51Nod.1766.树上最远点对(树的直径 RMQ 线段树/ST表)

HDU - 6704 K-th occurrence (后缀数组+主席树/后缀自动机+线段树合并+倍增)