堆是一種效率很高的資料結構,可以動態地維護乙個數列的最大或最小值,用堆維護拓撲排序效率比佇列高。
給定乙個有n個節點的有向圖(編號為0~n-1),求其拓撲排序的最小字典序。
第一行兩個整數 n和m,表示圖有n個點,m條邊。 接下來m行,2個整數ui和vi,表示ui到vi有條有向邊。
n個用空格隔開的整數,表示拓撲序列。
樣例輸入:
3 2
0 2
1 2
樣例輸出:
0 1 2
用佇列維護只能過樣例,所以用堆維護。
**:#includeusing namespace std;
priority_queue< int,vector< int >,greater< int > > q;
const int maxn=1000010;
int n,m,t=0;
struct edge
e[maxn];
int linkk[maxn],len=0,rd[maxn]=;
void insert(int xx,int yy)
void init()
}void topsort()
{ for(int i=0;i
查錯(拓撲排序 堆維護)
不了解堆的可以開啟鏈結看看基礎 拓撲排序 由aov網構造拓撲序列的拓撲排序演算法主要是迴圈執行以下兩步,直到不存在入度為0的頂點為止。1 選擇乙個入度為0的頂點並輸出之 2 從網中刪除此頂點及所有出邊。查錯 description 一天,考試題神坑了。不過,我們的 mosaic 還是成功的寫出了程式...
查錯 (拓撲排序 堆維護)
查錯 description 一天,考試題神坑了。不過,我們的mosaic還是成功的寫出了程式,當然,結果比較贊 tbmw tbmw 結果被痛罵了一頓。經過漫長的檢查,mosaic發現他的程式有m處錯誤,現在要做的就是修改程式了。但是他發現,這m處錯誤存在複雜的聯絡,有的錯誤必須在其他錯誤之前改正,...
拓撲排序(dfs用棧,bfs用佇列)
現在你總共有 n 門課需要選,記為 0 到 n 1。在選修某些課程之前需要一些先修課程。例如,想要學習課程 0 你需要先完成課程 1 我們用乙個匹配來表示他們 0,1 給定課程總量以及它們的先決條件,返回你為了學完所有課程所安排的學習順序。可能會有多個正確的順序,你只要返回一種就可以了。如果不可能完...