一个很妙的转化。
链接
Description
给你一张 \(n\) 个点,\(m\) 条边的带权无向连通图,其中结点 \(1,2,…,k\) 为充电中心。
一个机器人在图中行走,假设机器人的电池容量为 \(c\),则任何时刻,机器人的电量 \(x\) 都必须满足 \(0\le x\le c\)。如果机器人沿着一条边权为 \(w\) 的边从结点 \(i\) 走到结点 \(j\),它的电量会减少 \(w\)。机器人可以在到达某个充电中心时把电量充满。
现在有 \(q\) 个询问,每次询问机器人要从 \(a\) 点到达 \(b\) 点,电池容量至少为多少,各个询问相互独立。保证 \(a\) 点和 \(b\) 点都是充电中心。
\(2 \le k \le n \le 10^5\) 且 \(1 \le m, q \le 3 \cdot 10^5\),\(a_i\neq b_i\) 且 \(1\le a_i,b_i \le k\)。
Solution
下面称充电中心为关键点。
考虑若合法路径经过边 \((u,v,w)\),在经过这条边前(处于点 \(u\))电量 \(g\) 和它们会满足什么关系。
令点 \(x\) 到最近的一个关键点的距离为 \(d_x\)。易知:
- 这个电量离它上一次充能的关键点距离不超过 \(c-g\):\(d_u \le c-g\)。
- 这个电量能够支撑它到下一个关键点并充电(注意必须强制先经过这条边):\(g-w \ge d_v\)。
两个不等式分别移项得到:
即 \(w+d_v \le g \le c-d_u\),注意这个 \(g\) 只是个中介值,我们不在乎他的大小,只要能够存在这样一个 \(g\) 就行了(因为在关键点直接就加满电了)。
所以 \(w+d_v \le c-d_u\),即 \(c \ge w+d_v+d_u\)。
\(d\) 可以通过跑多源最短路得到,因此每个边的 \(w+d_v+d_u\) 已经可以在正确的复杂度下确定了,把它设定为新边权。问题转化为 \(q\) 次求 \(a,b\) 两点间的路径权值最小值(一个路径的权值为该路径上所有边权最大值),可以发现这就是最小瓶颈路板子,Kruskal 重构树即可。
这道题启发我们遇到图论+关键点,往往在数据范围较大时跑多源最短路;对于一些复杂的询问,考虑图上的边对答案的影响,分开求解即可。
submission