hdu1285(拓撲排序)

2021-06-17 18:16:14 字數 664 閱讀 4543

拓撲排序簡單來說就是把乙個圖的所有節點排序,使得每一條有向邊(u,v)對應的u都排在v的前面。 

拓撲排序最大的用途就是判斷乙個有向圖是否有環,當然判斷還有一種方法就是floyd演算法。

如果用鄰接表的話拓撲排序的時間複雜度是o(n*e),鄰接矩陣是o(n^2),n表示頂點數,e表示邊數,floyd時間複雜度是o(n^3)。 性質

1、 拓撲排序在有向無環圖中才能排出有效的序列,否則能判斷該有向圖有環。

2、如果輸入的有向圖中的點,不存在入度為0的點,則該有向圖存在迴路

3、如果存在的入度為0的點大於乙個,則該有向圖肯定不存在乙個可以確定的拓撲序列但並不妨礙拓撲排序 

與一般的拓撲排序比,這個只多了乙個儲存名次的陣列。。

#include

#include

int map[501][501];

int ans[501],degree[501];

int m,n;

void toposort()}}

int main()

{int i,h,k;

while(scanf("%d%d",&n,&m)!=eof)

{memset(degree,0,sizeof(degree));

memset(map,0,sizeof(map));

for(i=0;i

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...

hdu 1285 拓撲排序

題意 中文題 比較裸的拓撲排序,就是題目中要求編號小的隊伍應該在前面,所以用乙個優先佇列,讓小的先出隊。優先佇列從小到大的寫法是 priority queue,greater q 用vector來儲存,這樣的話不需要進行判重 include include include include inclu...