拓撲排序用堆維護

2021-08-14 03:23:52 字數 624 閱讀 4684

堆是一種效率很高的資料結構,可以動態地維護乙個數列的最大或最小值,用堆維護拓撲排序效率比佇列高。

給定乙個有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 給定課程總量以及它們的先決條件,返回你為了學完所有課程所安排的學習順序。可能會有多個正確的順序,你只要返回一種就可以了。如果不可能完...