最短路三题 bzoj4681旅行&bzoj2143:飞飞侠&bzoj2259新型计算机

传送门:
bzoj4681
bzoj2143
bzoj2259


bzoj4681

这题好神啊!

首先贪心(取最短路树然后用不在树上的最小权去换)显然是不正确的,但是贪心的思想值得借鉴:

最后的答案必然是前 L L L小的边+后面的一些边。

于是枚举这个 L L L s p f a spfa spfa f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示从起点到 i i i经过了 j j j条前 L L L小的边,交换了 k k k次值所选的所有未交换的不是前 L L L小的边的边权和。

转移:
一条前 L L L小的出边,转移直接加上 j + 1 j+1 j+1;否则要么 k + 1 k+1 k+1,要么加上这条边的边权。


bzoj2143

暴力的话边太多了。

实际上可以把 a i , j a_{i,j} ai,j看做话费 a i , j a_{i,j} ai,j获得了可以走 b i , j b_{i,j} bi,j距离的能量。
每走一格消耗一点能量。
d i s [ 150 ] [ 150 ] [ 300 ] dis[150][150][300] dis[150][150][300]的转移。


bzoj2259

BIT优化DP的做法就不具体说了。

考虑连边求 1 1 1 ( n + 1 ) (n+1) (n+1)的最短路:

i → i + S i + 1 i\to i+S_i+1 ii+Si+1的边权为0(对于所有 i + S i + 1 ≥ n + 1 i+S_i+1\geq n+1 i+Si+1n+1的点就连一条 i → n + 1 i\to n+1 in+1边权为 i + S i − n i+S_i-n i+Sin的边)。

i → i + S i + 1 ± j i\to i+S_i+1\pm j ii+Si+1±j的边权为 j j j,连边可以优化:
i i i先到达 i + S i + 1 i+S_i+1 i+Si+1和从 i + S i + 1 i+S_i+1 i+Si+1到达与它距离为 j j j的点的过程实际上是无关的:所以我们只需要 ( i , i + 1 ) , ( i , i − 1 ) (i,i+1),(i,i-1) (i,i+1),(i,i1)均连上边权为1的边即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值