HDU 1285 (直接拓撲排序)

2021-08-15 02:31:31 字數 744 閱讀 7709

題意:給定n個人的m組相對排序關係,求這n個人的拓撲排序(有多種排序情況時,取字典序最小的那種)

拓撲排序思路:

1. 先將頂點關係,轉換為圖里的關係,並通過頂點關係,初始化入度陣列indegree(注意重邊)

2. 找到入度為0的點,作為排序起點,若有多個,取序號最小的,刪去該結點(入度取為-1)

3. 將所有待刪結點指向的結點,入度減1

4. 重複2、3,直到沒有入度為0的節點,或者所有頂點都已輸出

#include #include #define clear(x, y) memset(x, y, sizeof(x))

using namespace std;

const int n = 500 + 10;

int m[n][n]; //map

int indegree[n]; //結點入度

int ans[n]; //待輸出結點

int n, m; //頂點數、相對排名數

void init()

void solve() }

for (int i = 1; i <= n; i++)

} }

for (int i = 1; i < n; i++)

cout << ans[i] << " ";

cout << ans[n] << endl; }

int main()

return 0;

}

hdu1285(拓撲排序)

拓撲排序簡單來說就是把乙個圖的所有節點排序,使得每一條有向邊 u,v 對應的u都排在v的前面。拓撲排序最大的用途就是判斷乙個有向圖是否有環,當然判斷還有一種方法就是floyd演算法。如果用鄰接表的話拓撲排序的時間複雜度是o n e 鄰接矩陣是o n 2 n表示頂點數,e表示邊數,floyd時間複雜度...

hdu 1285(拓撲排序)

題意 給各個隊間的勝負關係,讓排名次,名詞相同按從小到大排。解析 拓撲排序是應用於有向無迴路圖 direct acyclic graph,簡稱dag 上的一種排序方式,對乙個有向無迴路圖進行拓撲排序後,所有的頂點形成乙個序列,對所有邊 u,v 滿足u 在v 的前面。該序列說明了頂點表示的事件或狀態發...

HDU1285 拓撲排序

拓撲排序的水題,題意是確定比賽的名次,每一次將輸的人的入度加一,然後就是拓撲排序的模板套路了,記住輸入的時候可能有重邊,貼 include include include include using namespace std int map 600 600 head 600 hash 600 in...