眾所周知, tt 是一位重度愛貓人士,他有乙隻神奇的魔法貓。
有一天,tt 在 b 站上**貓貓的比賽。一共有 n 只貓貓,編號依次為1,2,3,…,n進行比賽。比賽結束後,up 主會為所有的貓貓從前到後依次排名並發放愛吃的小魚幹。不幸的是,此時 tt 的電子裝置遭到了宇宙射線的降智打擊,一下子都連不上網了,自然也看不到最後的頒獎典禮。
不幸中的萬幸,tt 的魔法貓將每場比賽的結果都記錄了下來,現在他想程式設計序確定字典序最小的名次序列,請你幫幫他。
輸入有若干組,每組中的第一行為二個數n(1<=n<=500),m;其中n表示貓貓的個數,m表示接著有m行的輸入資料。接下來的m行資料中,每行也有兩個整數p1,p2表示即編號為 p1 的貓貓贏了編號為 p2 的貓貓。
給出乙個符合要求的排名。輸出時貓貓的編號之間有空格,最後一名後面沒有空格!
其他說明:符合條件的排名可能不是唯一的,此時要求輸出時編號小的隊伍在前;輸入資料保證是正確的,即輸入資料確保一定能有乙個符合要求的排名。
input
4 31 2
2 34 3
output
1 2 4 3
該題就是拓撲排序的一般思路,思路比較簡單,這裡不再贅述。
但是在寫這個題的時候卻遇到了乙個大bug。
題目輸入的拓撲結構是有多重邊的,也就是說,兩隻貓進行的某一次比賽的結果會被輸入多次。
而我儲存邊時用的是比較簡單的鄰接矩陣(我覺得這個圖並不是太大,用鄰接矩陣能夠儲存,而且會更簡單。還有乙個原因是此時我還不會用前向星= =),這就出現了問題:我在判斷是否有邊以及處理節點的入度是都是按照只有一條邊去寫的。
所以說,如果是用鄰接矩陣,一定要注意多重邊的情況。而如果是前向星則不太需要專門注意多重邊,因為多重邊會多次被加到鏈上。
#include
#include
#include
#include
#include
#include
#define mem(s,v) memset(s,v,sizeof(s))
using
namespace std;
int battle[
510]
[510];
intmain()
for(
int j=
1;j<=n;j++)}
i=0;
while
(!q.
empty()
)// }
// if(!b)
int u = q.
top();
q.pop();
if(i>0)
printf
(" ");
printf
("%d"
,u);
i++;for
(int k=
1;k<=n;k++)}
}}printf
("\n");
}return0;
}
Week8 貓貓向前衝 拓撲排序
題目大意 眾所周知,tt 是一位重度愛貓人士,他有乙隻神奇的魔法貓。有一天,tt 在 b 站上 貓貓的比賽。一共有 n 只貓貓,編號依次為1,2,3,n進行比賽。比賽結束後,up 主會為所有的貓貓從前到後依次排名並發放愛吃的小魚幹。不幸的是,此時 tt 的電子裝置遭到了宇宙射線的降智打擊,一下子都連...
Week8 作業 B 貓貓向前衝
眾所周知,tt 是一位重度愛貓人士,他有乙隻神奇的魔法貓。有一天,tt 在 b 站上 貓貓的比賽。一共有 n 只貓貓,編號依次為1,2,3,n進行比賽。比賽結束後,up 主會為所有的貓貓從前到後依次排名並發放愛吃的小魚幹。不幸的是,此時 tt 的電子裝置遭到了宇宙射線的降智打擊,一下子都連不上網了,...
Week 8 作業 B 貓貓向前衝
眾所周知,tt 是一位重度愛貓人士,他有乙隻神奇的魔法貓。有一天,tt 在 b 站上 貓貓的比賽。一共有 n 只貓貓,編號依次為1,2,3,n進行比賽。比賽結束後,up 主會為所有的貓貓從前到後依次排名並發放愛吃的小魚幹。不幸的是,此時 tt 的電子裝置遭到了宇宙射線的降智打擊,一下子都連不上網了,...