杭電 1285 確定比賽名次(直接拓撲排序)

2022-08-03 09:57:11 字數 1727 閱讀 3118

有n個比賽隊(1<=n<=500),編號依次為1,2,3,。。。。,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在請你程式設計序確定排名。

輸入有若干組,每組中的第一行為二個數n(1<=n<=500),m;其中n表示隊伍的個數,m表示接著有m行的輸入資料。接下來的m行資料中,每行也有兩個整數p1,p2表示即p1隊贏了p2隊。

給出乙個符合要求的排名。輸出時隊伍號之間有空格,最後一名後面沒有空格。

其他說明:符合條件的排名可能不是唯一的,此時要求輸出時編號小的隊伍在前;輸入資料保證是正確的,即輸入資料確保一定能有乙個符合要求的排名。

4 31 2

2 34 3

1 2 4 3

拓撲排序模板鏈結

核心:記錄前驅為0的,刪除以   前驅為0的點   為尾的箭頭

二維陣列記錄

1 #include2 #include

3int n,m,i,j,num[505],que[505],map[505][505];4

void

topo()517

}18 que[k++]=m;

19 num[m]=-1;20

for(j = 1 ; j <= n ; j++)

2126}27

}28for(i = 0 ; i < k ; i++)

293637}

38int

main()

3953}54

topo();55}

56 }

鄰鍊錶記錄

1 #include2 #include

3int n,m,i,j,a,b,que[505],num[505],head[505];4

struct

stu5

st[100000];8

void

topo()920

}21 que[k++]=m;

22 num[m]=-1;23

for(i = head[m] ; i != -1 ; i=st[i].next)

2427}28

for(i = 0 ; i < k ; i++)

2936}37

intmain()

3851

topo();52}

53 }

佇列查詢

1 #include2 #include3 #include

4 #include5

using

namespace

std;

6int n,m,i,j,a,b,num[505],key,map[505][505];7

void

topo()818

}19 key=1;20

while(!que.empty())

2129

else

3033

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

3442}43

}44}45 printf("\n"

);46}47

intmain()

4861}62

topo();63}

64 }

確定比賽名次 HDU杭電1285 拓撲排序

problem description 有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在請你程式設計序...

杭電 1285 確定比賽名次 拓撲排序入門

傳送門 拓撲排序 按某種順序輸出沒有前驅的點。思路 題目即要求按字典序拓撲排序。ac include include includeusing namespace std int n int par 505 前驅 int ans 505 記錄答案 bool chart 505 505 記錄兩人是否進...

杭電ACM 1285 確定比賽名次(拓撲排序)

這裡用到了網上找的的拓撲排序的模版。map i j 存放有向圖的起點i和終點j之間是否連線,1連線,0為空。結果的順序存放在res陣列裡面。d i 表示第i個元素的入度,1 入度為零即表示可以讀 2 有多個入度為零的點則最終順序不唯一 3 不存在入度為零的點則順序不能確定。這道題不用考慮有環的情況。...