最短路图
最短路图
type1 : 给定一张有向图,起点s,终点t
求s到t的所有最短路组成的DAG(没有负环的最短路图一定是DAG)
首先需要建一张正向图,一张反向图
dis1[] 表示正向图上点s到所有点的最短距离,dis2[]表示反向图上点t到所有点的最短距离
考虑正向图上的一条边(edge){u,v,w}
如何判断这条边需不需要加入最短路图呢?
很显然只需要满足
dis1[u]+w+dis2[v]==dis1[t] 就ok
定理:
i→j 的最短路径的任意一条子路径 u→v,都是最短路径。
type2 :只有源点s。判断一条边 u→v 是否在最短路图中,只需判断是否 dis[u]+val(u→v)==dis[v]。
证明显然。