DTOJ 4754. 旅途

题意

B市可以由一个 n n n 个点 m m m 条边的带权无向图来描述。其中边 e e e 的边权为 w e w_e we。小A要从编号为 1 1 1 的地方走到编号为 n n n 的地方。对于一条选定的路径 P P P,小A要花的时间就是这条路径经过的边的总长度。问小A最少需要多少时间才能到?

当小A还在深思这个问题,担心自己不能准时到达的时候,一位长者来到他的面前。他可以用魔法,帮助小A减少他所需的时间。具体而言,对于一条路径 p = { e 1 , e 2 , ⋯   , e c } p=\{e_1,e_2,\cdots,e_c\} p={e1,e2,,ec},小A最终需要的时间是中的前 K K K 大的和。假如 c < K c<K c<K,则是这些边的总和。

当然小A是需要付出代价的,不同的 K K K,他需要 w e 1 , w e 2 , ⋯   , w e c w_{e_1},w_{e_2},\cdots,w_{e_c} we1,we2,,wec 付出不同的代价。因此小A想知道当 K K K 分别取 1 ⋯ n 1 \cdots n 1n的时候,他的最小时间耗费分别是多少。

对于 30% 的数据, n , m ≤ 15 n,m \le 15 n,m15

对于 60% 的数据, n , m ≤ 300 n,m \le 300 n,m300

对于的 100% 数据 , n , m ≤ 3000 , 1 ≤ u i , v i ≤ 1 0 9 n,m \le 3000, 1 \le u_i,v_i \le 10^9 n,m3000,1ui,vi109,保证 1 1 1 n n n 连通。

题解

考场上的想法是枚举第k大的边(权值为w),然后做一个DP, f [ i ] [ j ] f[i][j] f[i][j]为到i经过j条权值>w的边(其它的看作0),跑最短路后去更新答案,效率 O ( m n 2 l o g n ) O(mn^2logn) Omn2logn
考虑优化,注意到枚举边这一步是必要的(考场上一直想优化这步就自闭了)。于是考虑减少DP状态,那就不能记走了多少条有权值的边。那对于不同的k该怎么处理呢?只能拿着一条最短路去更新所有k,必须对原图的边权有所改变:考虑对于一条权值>w的边,先少加一个w,这样更新一个k的时候再加上kw,由于kw只和k有关,保证原图的最短路可以贡献给每个k,就是正确的,效率 O ( m n l o g n ) O(mnlogn) O(mnlogn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值