一、題目
眾所周知, 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 3output1 22 3
4 3
1 2 4 3五、解題思路
拓撲排序。
如果編號為 p1 的貓貓贏了編號為 p2 的貓貓,則在圖中新增有向邊p1->p2,這樣可以保證拓撲排序後p1一定在p2之前。記錄每個點的入度,如果點的入度為0,則證明沒有贏了該只貓的其他貓貓了,該點應該在其他點前。
因為題目要求輸出時編號小的隊伍在前,定義優先順序佇列儲存。開始將入度為0的點加入優先順序佇列中,逐個將隊首的點從圖中去除,將與點存在有向邊的點的入度-1。在每次點出隊後,將入度變更**度為0的點入隊。
六、**樣例
#include
#include
#include
using
namespace std;
int n,m;
int p1,p2;
struct edge
ed[50010];
int head[
505]
;int in_deg[
505]
;int tot;
void
add(
int x,
int y)
priority_queue<
int> q;
vector<
int> ans;
void
toposort()
}while
(q.size()
)}for(
int i=
0;i1;i++
)printf
("%d\n"
,ans[n-1]
);}int
main()
for(
int i=
0;i)toposort()
;}return0;
}
第八周作業
1 理解窗體的檔案含義及組織結構 如 form1.cs form1.designer.cs form1.resx 控制項的屬性 方法和事件。2 完全用 的方式在form1.cs檔案中建立乙個文字標籤物件label1,用 設定label1的parent location name text autos...
第八周作業
1 顯示統計占用系統記憶體最多的程序,並排序 2 編寫指令碼,使用 for 和 while 分別實現 192.168.0.0 24 網段內,位址是否能夠 ping 通,若 ping 通則輸出 success 若 ping 不通則輸出 fail 3 每週的工作日 1 30,將 etc 備份至 back...
第八周作業
本週是團隊專案的最後一周,我們的團隊專案也完成了大部分的工作。下面是我們近兩周的工作內容,以及我在這個團隊專案中的總結與心得體會。我們小組所進行的專案是仿照手遊 球球大作戰 製作3d的pc版遊戲。到目前為止,我們已經完成了大部分文件與編碼工作,還差測試文件的成型 其它文件的細節修改與一些bug的修補...