题目大意
n点m边无向图,k个关键点,q个询问(a,b)。问从a到b需要的最小容量c是多少。保证a,b是关键点。你能量池最多有c能量,每次走边消耗边权那么多的能量。在关键点会补满能量。每次询问需要的最少能量。
k , n ≤ 1 e 5 , q , m ≤ 3 e 5 k,n\le1e5,q,m\le 3e5 k,n≤1e5,q,m≤3e5
解题思路
以所有关键点为源求一遍多源最短路,然后对于一个点 u u u,如果当前能量 x < d i s [ u ] x < dis[u] x<dis[u],肯定到不了,如果 x > = d i s [ u ] x >= dis[u] x>=dis[u],那么 x x x应该是 ≤ c − d i s [ u ] \le c-dis[u] ≤c−dis[u]的。又因为 x > = d i s [ u ] x >= dis[u] x>=dis[u]所以可以跑到那个最近的关键点又回来,所以x每个点u的能量可以保持在 c − d i s [ u ] c-dis[u] c−dis[u]。 u − > v u->v u−>v可以走需要 c − d i s [ u ] − w > = d i s [ v ] c-dis[u]-w >= dis[v] c−dis[u]−w>=dis[v],转换成 d i s [ u ] + d i s [ v ] + w ≤ c dis[u]+dis[v]+w\le c dis[u]+dis[v]+w≤c。以 d i s [ u ] + d i s [ v ] + w dis[u]+dis[v]+w dis[u