zoukankan      html  css  js  c++  java
  • 【图论】第k短路

    A*算法:

    单源单汇第k短路:

    给定一个源点s和一个汇点t,求解从s到t的第k短路。

    建立反图,从反图中,以t为源点跑单源最短路,得到原图中i点到t点的最短路val[i](也就是反图中t点到i点的最短路)
    用val[i]作为估价函数,当前状态(dis[i],i)的距离为dis[i],把(dis[i]+val[i],i)这个状态加入优先队列。每次从优先队列中取出最小值点u,枚举其出边,把其所有的出边的所有状态(dis[u]+w+val[v],v)无条件加入优先队列。

    也就是说,整个过程中保存着任意一条从s开始的路径的状态,每次取出到t的距离估价最小的状态进行扩展,意味着从这个状态开始全部走最短路到达t。每个节点u第i次从优先队列中被取出时,对应的就是(在目的地为t的前提下)到达i的第k短状态。所以每个点只需要取出至多k次这个状态,大于k次的状态不需要更新后续状态。时间复杂度为 (O((nk+m)logm))

    可持久化可并堆优化

  • 相关阅读:
    NOI2005维修数列
    BZOJ1208 [HNOI2004]宠物收养所
    BZOJ3223 文艺平衡树
    BZOJ [JSOI2008]星球大战starwar
    BZOJ1013 [JSOI2008]球形空间产生器sphere
    小程序之底部tabBar
    es6
    vue.js安装
    模块打包工具webpack
    highchart
  • 原文地址:https://www.cnblogs.com/purinliang/p/14394883.html
Copyright © 2011-2022 走看看