hdu 1285 確定比賽名次 拓撲排序

2021-07-04 16:09:27 字數 1535 閱讀 1011

題目:

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 

我一般不找失敗的藉口,但是這題真是前輩誤導了我 ||- _ -  聽說要用優先佇列,我啪啦啪啦敲完後發現和題裡例子都對不上。優先順序的問題都未能很好解決,怎麼能用優先佇列呢?比如用例,1-->2-->3<--4。在拓撲排序完成後,1和4是同一級的,所以結果該是1 4 2 3。sigh~以後想好再敲。

為逝去的**默哀3分鐘:

wa:#include #include #include #include #include using namespace std;

const int maxn=5e2+5;

struct nodeedge[maxn];

int head[maxn],indegree[maxn],n,m;

struct teamt[maxn];

int iq;

void topsort()

}cla++;

for(i=0;i0;k=edge[k].next)

}if(jia)cla++;

}}struct cmp

};int main()

topsort();

priority_queue,cmp > qq;

for(int i=0;i#include #include using namespace std;

const int maxn=5e2+5;

int map[maxn][maxn],indegree[maxn],n,m;

void topsort(){

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

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

if(indegree[j]==0){

indegree[j]--;

if(i!=n) cout<>n>>m){

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

memset(indegree,0,sizeof(indegree));

for(int i=0;i

確定比賽名次 HDU 1285 ,拓撲

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

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

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

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

g 確定比賽名次 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從...