可持久化可并堆优化k短路

问题

对于带权有向图,定义路径的长度为经过的边的权值之和。两条路径不同当且仅当经过边的顺序不同。给一个带权有向图 G G G 以及起点和终点 s , t s,t s,t,求 G G G s s s t t t 权值前 k k k 小的路径。

朴素做法

问题转化

定义 d i s x dis_x disx 表示从 x x x t t t 的最短路长度,权值为 w w w 的边 e : u → v e:u\to v e:uv 的花费 δ ( e ) = d i s v − d i s u + w \delta(e)=dis_v-dis_u+w δ(e)=disvdisu+w

可以理解成若从 u u u 走向 t t t 时,沿着边 e e e 而不是最短路径上的边走,至少需要多走 δ ( e ) \delta(e) δ(e) 的距离。

先求出 G G G 中从 t t t 出发沿着反向边走的最短路树,那么一条从 s s s t t t 的路径 P P P 是由若干条树边和非树边组成。 P P P 的长度可以表示为 l e n ( p ) = d i s s + ∑ e ∈ P δ ( e ) len(p)=dis_s+\sum_{e\in P}\delta(e) len(p)=diss+ePδ(e)

显然树边 e T e_T eT 满足 δ ( e T ) = 0 \delta(e_T)=0 δ(eT)=0。若令 P ′ P' P

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值