眾所周知, tt 是一位重度愛貓人士,他有乙隻神奇的魔法貓。
有一天,tt 在 b 站上**貓貓的比賽。一共有 n 只貓貓,編號依次為1,2,3,…,n進行比賽。比賽結束後,up 主會為所有的貓貓從前到後依次排名並發放愛吃的小魚幹。不幸的是,此時 tt 的電子裝置遭到了宇宙射線的降智打擊,一下子都連不上網了,自然也看不到最後的頒獎典禮。
不幸中的萬幸,tt 的魔法貓將每場比賽的結果都記錄了下來,現在他想程式設計序確定字典序最小的名次序列,請你幫幫他。
輸入有若干組,每組中的第一行為二個數n(1<=n<=500),m;其中n表示貓貓的個數,m表示接著有m行的輸入資料。接下來的m行資料中,每行也有兩個整數p1,p2表示即編號為 p1 的貓貓贏了編號為 p2 的貓貓
給出乙個符合要求的排名。輸出時貓貓的編號之間有空格,最後一名後面沒有空格!
其他說明:符合條件的排名可能不是唯一的,此時要求輸出時編號小的隊伍在前;輸入資料保證是正確的,即輸入資料確保一定能有乙個符合要求的排名。
顯然題目是對於每只貓的排名是要知道有多少只貓贏了該貓(包括間接贏),與出度入度有關,所以可以構造圖用拓撲排序來排名,這裡因為需要編號小的排序,所以將queue換成最小堆
拓撲排序的目標是將所有節點排序,使得排在前面的節點不能依賴於排在後面的節點,但需要注意的是只有有向無環圖才有拓撲序
#include
#include
#include
#include
#include
#include
using
namespace std;
vector<
int>ve[
550]
;int degree[
550]
;int n,m;
priority_queue<
int,vector<
int>
,greater<
int>
>q;
//大根堆
//priority_queue
void
kahn()
}for
(int i=
1;i<=n;i++)if
(!degree[i]
) q.
push
(i);
while
(q.size()
)}}int
main()
kahn()
;cout<}}
拓撲排序 貓貓向前衝
眾所周知,tt 是一位重度愛貓人士,他有乙隻神奇的魔法貓。有一天,tt 在 b 站上 貓貓的比賽。一共有 n 只貓貓,編號依次為1,2,3,n進行比賽。比賽結束後,up 主會為所有的貓貓從前到後依次排名並發放愛吃的小魚幹。不幸的是,此時 tt 的電子裝置遭到了宇宙射線的降智打擊,一下子都連不上網了,...
貓貓向前衝 拓撲排序
題目 眾所周知,tt 是一位重度愛貓人士,他有乙隻神奇的魔法貓。有一天,tt 在 b 站上 貓貓的比賽。一共有 n 只貓貓,編號依次為1,2,3,n進行比賽。比賽結束後,up 主會為所有的貓貓從前到後依次排名並發放愛吃的小魚幹。不幸的是,此時 tt 的電子裝置遭到了宇宙射線的降智打擊,一下子都連不上...
貓貓向前衝(拓撲排序)
眾所周知,tt 是一位重度愛貓人士,他有乙隻神奇的魔法貓。有一天,tt 在 b 站上 貓貓的比賽。一共有 n 只貓貓,編號依次為1,2,3,n進行比賽。比賽結束後,up 主會為所有的貓貓從前到後依次排名並發放愛吃的小魚幹。不幸的是,此時 tt 的電子裝置遭到了宇宙射線的降智打擊,一下子都連不上網了,...