確定比賽名次

2022-06-05 07:42:08 字數 1274 閱讀 5550

description

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

input

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

output

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

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

sample input

4 3

1 22 3

4 3

sample output

1 2 4 3
思路:

簡單的拓撲排序,這裡需要注意的是要求輸出時編號小的隊伍在前,所以我們在新增入度為0的節點時,可以考慮使用優先佇列。

拓撲排序過程:

1)統計入度為0 的節點將其加入佇列。

2)遍歷佇列,每取出乙個節點,減少與之相連的節點的入度,若其入度為0 則加入佇列。

ps:這裡我寫**的時候忘了注意沒邊相連的時候應該直接continue,不應該執行入度-1操作,這樣會重複。

**:

#include#include

#include

#include

#include

using

namespace

std;

bool maps[517][517

];int

in[517

];priority_queue

,greater >que;

void topsort(int

n)

int cnt=1

;

while (!que.empty())

else

cout

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

}}int

main()

topsort(n);}}

view code

確定比賽名次

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

確定比賽名次

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

確定比賽名次

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