传送门:https://ac.nowcoder.com/acm/contest/6885/F
题目大意:给你一棵树,多次询问,节点区间[l,r] 之间任意两点的距离的最大值
问题本质:
求区间点集带权直径
思路:
本题关键点:两个点集合并之后,新的直径 产生于 点集A直径的两个端点以及点集B直径的两个端点 两两组合 6种情况 之间.
证明反证法显然.
那么本题做法就显然了.由于是不带修改的,所以可以用ST表/线段树 维护 [区间直径的两个端点 + 长度].
更多树的直径相关问题:
1.HDU5993/ 2016icpc青岛L
给一棵树,每次询问删掉两条边,问剩下的三棵树的最大直径
考虑dfs序.砍一刀等价于砍出一颗子树.那子树在dfs序上一定是连续的.
所以区间相交分情况讨论,合并答案即可.
2.HDU3534 Tree. 统计树上直径个数.
启发式/点分 一下即可.
3.CF Div3 : E. Minimal Diameter Forest 森林合并成一颗树 使得树的直径最大最小.
贪心.