[HNOI2014]道路堵塞

这是一篇没有代码的博客。目的是在全是玄学复杂度的算法中留下有复杂度保证的算法。

原文摘自千年之狐_天才 :

靠谱做法应该是A+线段树。用A跑k短路,第一次跑到的一定是所给最短路,其次跑到的所有最短路将答案更新。如果只是单纯这样的话,是不行的,因为所有路径都会被更新一次。但是我们不难发现一个信息,假设将最短路径上的点标号0-n0n,答案一定是0->u->v->n0>u>v>n,u,vu,v在最短路上(这个题解也说到了),而且u->vu>v与最短路交集为空。而且答案不会有两段不连续路径不和最短路有交集。因此我们在跑A*时记录一个optopt.
opt=0:if(下个点是最短路上的点)opt->0
   else opt->1
opt=1:if(下个点是最短路上的点)opt->2
   else opt->1
opt=2:线段树区间更新。
对于每个点,如果增广过来的左端点是一样的,只保留第一个,因为dis肯定是递增的,所以对于同一端点,每个点只会被增广到一次。(map or hash判断)这个非常关键否则可能被卡成指数级qwq。这样的话其实按理来讲应该就是O(mlogm)左右了。

 

转载于:https://www.cnblogs.com/GreenDuck/p/11516940.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值