[HDOJ 4889] Scary Path Finding Algorithm [SPFA]

这是一个毁三观的题...

题目首先给出了一个slf优化的SPFA的代码,然后让你hack他...

经过这道题..再也不敢用slf优化了..或者说这根本不是个优化...

slf优化就是说,在spfa的队列中,如果要加入队列的节点比当前的队首节点距离还要小,则将其添加到队首而不是队尾...也就是说,类似dijkstra,优先从距离近的点出发。

这个看起来效果不错的优化,实际上有着致命的问题,在特别的图上,复杂度会退化到2^n。

在这个图中,我们设计算从i到n的最短路所需要的运算次数为f(i),则对于奇数号点p,如1,3,..,n,会把p+1放到队尾,把p+2放到队首,因为p+2在队首,所以会先从p+2开始,又因为后边所有的边都是非正的,所以他们不会小于p+2,即他们也会放到队首。这样我们就先计算了以下从p+2出发的一次最短路,然后在从p+1到p+2,更新了p+2的值,又重新计算了一次从p+2出发的一次最短路。这样我们可以得出f(i)>2*f(i+2),这个递归式显然是指数增长的,即只需30对点,就可以让它的复杂度增长到2^30。

过这道题的代码是这样的..无须考虑输入数据...

</

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值