给你一张图,每条边消耗的电量,$1..k$为充电桩,可以充到$c$.
$q$次询问,每次询问两个充电桩之间最少需要多少$c$。
想到在两两充电桩之间构建新的边,如何建呢?使两两之间新边距离最短。(不可能对每一个充电桩跑一边$dijkstar$)
可以先对所有充电桩建立一个最大源点。$dis[u]$为离最近充电桩的距离
对于每一条原边$(u,v,w)$,$c>=dis_u+dis_v+w。$那么问题变成求一条从 𝑎 到 𝑏 的路径使得路径上每条边的$𝑑𝑖𝑠_𝑢+𝑑𝑖𝑠_𝑣+𝑤$的最大值最小(明显是满足条件的最小的 𝑐)。
然后我们把每条边建好,发现若$1->2->3$和$1->3$不需要重复,只需要选择最小的,因为题目是为了最大值最小。这样就是最小生成树的思想。 (建树即可)。
题意就成了求树上两点之间边的最大值。$lca \ is \ ok$
代码
1 |
|
</details>