题意
给定(n)个点,(m)条带权边的无向图,走过第(i)条边,血槽中的血会下降(v_i)点,如果不足(v_i)点,这人会当场去世。
这(n)个点中,有若干个是关键点,在这些关键点可以将血槽补满。
(q)次询问,每次问一个玩家的血槽至少需要多大,才能从(x)走到(y)。
保证(x,y)是关键点
做法
若所有点均为关键点,则搞个MST查询路径最小值即可
可以将关键点两两之间求最短路然后用其作新图的边,搞个MST
但这样边数是(O(n^2))的
对于原图的点(i),令(from_i)为(i)最近的关键点,(dis_i)为距离
若((u,v,w)in E),(from_u
eq from_v),则将新图加入((from_u,from_v,dis_u+dis_v+w))
正确性:
对于关键点(x,y(x eq y)),其在原图的最短路径上,若均不满足((u,v)in E),(from_u=x,from_v=y)
则通过最短路径上生成的边,会比(x,y)之间连最短路这条边优