为什么会变成这样呢? #5(常数边权最短路)

给定一个 \(n\) 个点 \(m\) 条边的有边权无向图,其中边权 \(w_i\in \{0,1,\dots,k-1\}\),求点 \(1\) 到各个点的最短路。

期望复杂度:\(O((n+m)k)\)

0k最短路

在经典的 Dijkstra 算法中,我们使用一个优先队列来维护松弛队列,这样的时间复杂度为 \(O((n+m)\log k)\)。现在我们考虑为每种边权开一个松弛队列(一共 \(k\) 个松弛队列)。对于某个特定的边权 \(w\),由于松弛后的距离都是 \(\text{dis}[u]+w\) 的形式,所以不需要用优先队列,直接保留原来取出顶点的顺序就好。每次循环时枚举所有 \(k\) 个队列找最小的队列即可。

例题:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值