谭总的世界 20250309
ABC394G
考虑将相邻的点连边,边权为两侧点权的最小值。跑最大生成树。
然后每组询问求出两个点到 LCA 的最小边权,实际上可以转化为两条链上的点权。LCA 时维护一个 ST 表,\(ST_{i,j}\) 表示以第 \(i\) 个点为开始往上的 \(2^j\) 个点中的最小点权。
一般的路径都形如 \(st\)(表示初始所在点)\(\to \text{LCA}\to ed\),需要先走到其间的最小高度。
常见的代码细节:
- 若起始点和终止点相同,直接从 \(x\) 楼到 \(y\) 楼即可。
- 若 \(\min(x,y)\le \min dep\)(表示路径的最小深度),也可以直接从 \(\min(x,y)\) 到 \(\max(x,y)\)
- 注意对马上跳到一起的 \(u,v\) 点的 ST 表也要加入统计最小值。
令 \(n=H\times W\),则时间复杂度为 \(O(n\log n+q\log n)\)。
为什么我们机房都不会呢?
其实还有离线整体二分的思路。