Codeforces 1253F - Cheap Robot(最短路+并查集/Kruskal树)

题目大意

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,n1e5,q,m3e5

解题思路

以所有关键点为源求一遍多源最短路,然后对于一个点 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] cdis[u]的。又因为 x > = d i s [ u ] x >= dis[u] x>=dis[u]所以可以跑到那个最近的关键点又回来,所以x每个点u的能量可以保持在 c − d i s [ u ] c-dis[u] cdis[u] u − > v u->v u>v可以走需要 c − d i s [ u ] − w > = d i s [ v ] c-dis[u]-w >= dis[v] cdis[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]+wc。以 d i s [ u ] + d i s [ v ] + w dis[u]+dis[v]+w dis[u

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值