P r o b l e m \mathrm{Problem} Problem
给定一个n个点、m条边的带权无向图,其中有s个点是加油站。
每辆车都有一个油量上限b,即每次行走距离不能超过b,但在加油站可以补满。
q次询问,每次给出x,y,b,表示出发点是x,终点是y,油量上限为b,且保证x点和y点都是加油站,请回答能否从x走到y。
S o l u t i o n \mathrm{Solution} Solution
如果我们将数据范围改变到 O ( n 2 ) O(n^2) O(n2)级别的话,我们可以将每一个加油站之间按照最短路径为边权,两两连边。在询问时我们只需要找到两点间最大边权值,与给定的数值进行比较即可。
要求任意两点间最大边权最小,所求即为瓶颈生成树,就是最小生成树。
但是我们显然无法做到对于任意两个加油站之间都有连边,因此我们需要找到某一种方法来优化建图。考虑 x x x带 y y y最短路径中的某一个点 p p p.
距离点 p p p最近的加油站不是 x x x和 y y y,设该点为 c c c,则 max ( x , c ) , max ( y , v ) ≤ max ( x , y ) . \max(x,c),\max(y,v)\le \max(x,y). max(x,c),max(y,v)≤max(x,y).那么 x x x到 y y y的边完全可以通过 ( x , c ) (x,c) (x,c)以及 ( c , y ) (c,y) (c,y)
来经过.
- 至少路劲长度是一样的,因为边 ( p , c ) (p,c) (p,