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)。

posted @ 2023-03-10 11:01  Watware  阅读(39)  评论(1编辑  收藏  举报