欧拉序 + 贪心 + 二分.
- $LCA$ 问题首先可以处理出欧拉序,将树上问题转化成序列问题.
- 于是就变成了给出一些 $A$ 类点,一些 $B$ 类点,选两个不同类的点作为区间,求区间内 $dep$ 的最小值的最大值.
- 看上去可以直接二分,然而没什么用,因为区间数目是 $|A|\cdot |B|$ 的.
- 考虑贪心.对于一个 $B$ 类点,如果我们钦定它作为左端点,那么那个作为右端点的 $A$ 类点应该越靠左越好.如果钦定它为右端点,那么那个 $A$ 类点应该越靠左越好.
- 于是对每个 $B$ 类点二分出左/右最近的 $A$ 类点,将这两个区间的 $dep$ 最小值加入贡献.
- 预处理 $ST$ 表,时间复杂度 $O(\sum |B| \cdot log|A|)$ .
1 |
|