PTA刷題 甲級 拓撲排序

2021-10-11 05:31:54 字數 2029 閱讀 8294

拓撲排序以前不考,現在考的頻率好高。

其實沒啥難的,抓住一點:入度為0時,才能被輸出(或者被選中,乙個意思)。所以要用個int indegree來維護入度的數量。 當要我們判斷乙個圖能不能是拓撲排序(即沒有環),就是看入過佇列的節點數是不是就是n。

例題:大意:給你乙個圖,讓你判斷能不能拓撲排序。

輸入資料:

輸入說明:輸入第一行給出子任務數n(≤100),子任務按1~n編號。隨後n行,每行給出乙個子任務的依賴集合:首先給出依賴集合中的子任務數k,隨後給出k個子任務編號,整數之間都用空格分隔。

1200

2120

1415

2361

3278

17110

17

輸出:

0
**:

#include

#include

#include

#include

#include

using

namespace std;

const

int maxnum =

105;

int n;

vector<

int> g[maxnum]

;int indegree[maxnum]

;bool

judge()

}if(cnt == n)

return

true

;else

return

false;}

intmain()

} cout <<

judge()

;return0;

}

1146 topological order

輸入:每個輸入檔案包含乙個測試用例。對於每種情況,第一行給出兩個正整數n(≤1000),表示圖中頂點的數量,m(≤10000)表示有向邊的數量。然後有m條線,每條線給出一條邊的開始點和結束點。頂點編號從1到n,圖後還有乙個正整數k(≤100)。然後是k行查詢,每一行給出所有頂點的排列。一行中的所有數字都用空格隔開。

681

2135

2542

3263

4645

1523

6451

2634

5123

6452

1634

1234

56

輸出:

在一行中列印所有符合「非拓撲順序」的查詢索引。指標從零開始。所有的數字用空格隔開,行首和行尾都不能有多餘的空格。很顯然,至少有乙個答案。

3

4

思路:對於某個序列來說,乙個個把數字讀進來,然後判斷這個數當前的入度是否是0。如果不是0,則說明違反了拓撲排序。

#include

#include

#include

#include

#include

using

namespace std;

const

int maxnum =

1005

;const

int inf =

99999

;int n, m, k;

vector<

int> g[maxnum]

;int indegree[maxnum]

;vector<

int> res;

intmain()

cin >> k;

for(

int i =

0; i < k; i++)if

(judge ==0)

res.

push_back

(i);

}for

(int i =

0; i < res.

size()

; i++

)return0;

}

PAT甲級刷題

給定兩個字串s1和s2,刪除s1中在s2 現過的字元設定flag陣列,初始化為0。遍歷s2並將其字元轉化為ascii碼值,並在flag陣列中相應位置值標記為1,表示它出現過。再遍歷s1,若對應字元ascii碼值在flag陣列中相應位置值標記為0,則輸出。就是hash的思想,時間複雜度o len s1...

PTA 拓撲排序

乙個專案由若干個任務組成,任務之間有先後依賴順序。專案經理需要設定一系列里程碑,在每個里程碑節點處檢查任務的完成情況,並啟動後續的任務。現給定乙個專案中各個任務之間的關係,請你計算出這個專案的最早完工時間。首先第一行給出兩個正整數 專案里程碑的數量 n 100 和任務總數 m。這裡的里程碑從 0 到...

PTA刷題 甲級 並查集,堆,哈夫曼

並查集就是把節點放在陣列list裡面,初始化讓list裡面的每個位置都等於該位置角標。之後填入資料 用union union就是先找根,如果根不一樣,就把aroot並到broot底下。完成填入操作後,如果list裡面的某個i還是角標本身,就說明這個點是根節點。pta 1107 social clus...