拓扑排序学习笔记

1. 输出字典序最小的拓扑序:在BFS算法方法中用优先队列

2.

题意:

N个点M条边 DAG

求删去每个点后1-n最短路

N,M 3e5

做法: 

首先在DAG中可以跑拓扑排序,跑完拓扑排序有什么好处呢?

拓扑序上的一个点k作为划分线,前半段的点的集合设为x,后半段点的集合设为y,那么从点1到x中的任意一个点的最短路,一定没有经过k点;同理,从y中任意一个点到n一定也没经过k点。

那么这道题只要做一个预处理

1 .从1到其他点的最短路dis数组

2. 以及在反图上跑从n到其他点的dis2数组

那么去掉点k的最短路为min(W(u,v) + dis[u] + dis2[v]) (u为X集合的点, v为Y集合的点,从中取Min);

但这样复杂度肯定有大问题。怎么做呢,m条边,对于每条边w(u,v)我们将u,v之间的拓扑序的点区间取min(线段树)就可以了,复杂度mlogn。

无代码,找不到提交链接。

原文地址:https://www.cnblogs.com/AlexPanda/p/12520273.html