Trick:利用中继解决二元询问
Description
很多时候我们会遇到每次询问形如 \(w(u,v)\) 的题目,有时候我们可以把询问的集合 \(V\) 划分成 \(S,T\),并且存在一个集合 \(Relay\),使得对任意 \(u\in S,v\in T\),我们可以将 \(w(u,v)\) 转化到 \(w(u,Relay)\) 和 \(w(Relay, v)\)。然后我们考虑反过来维护 \(w(\cdot,Relay)\) 和 \(w(Relay,\cdot)\),再递归计算 \(S,T\),每次取中点分治即可到 \(\log\)。
Example
Problem
有 \(1\) 到 \(n\) 共 \(n\) 个点,\(m\) 条有向边,对任意边 \((u,v)\),满足 \(u\le v\le u+k\),其中 \(k\) 是定值。在线询问两个点的连通性。
Solution
注意到边关于 \(k\) 的限制,任意连续 \(k\) 个点必然无法被边跨越,即对任意连续 \(k\) 个点的集合 \(S\),分别在其两侧的点对 \((u,v)\) 的连通性可以转化为 \(S\) 到 \(u,v\) 的连通性。仔细维护并递归计算即可。(Source:9019)。