拓撲排序學習筆記

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。

無代碼,找不到提交鏈接。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章