貓貓向前衝 拓撲排序

2021-10-05 03:36:40 字數 1627 閱讀 6257

題目

眾所周知, tt 是一位重度愛貓人士,他有乙隻神奇的魔法貓。

有一天,tt 在 b 站上**貓貓的比賽。一共有 n 只貓貓,編號依次為1,2,3,…,n進行比賽。比賽結束後,up 主會為所有的貓貓從前到後依次排名並發放愛吃的小魚幹。不幸的是,此時 tt 的電子裝置遭到了宇宙射線的降智打擊,一下子都連不上網了,自然也看不到最後的頒獎典禮。

不幸中的萬幸,tt 的魔法貓將每場比賽的結果都記錄了下來,現在他想程式設計序確定字典序最小的名次序列,請你幫幫他。

input

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

output

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

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

sample input

4 31 2

2 34 3

sample output

1 2 4 3

解題思路

拓撲排序: 每次都取入度為0的點,把他從圖上去掉,然後繼續取入度為0的點,表示的是一種偏序的關係。比如,要先學高數,才能學概率論。所以拓撲排序出來,就是高數在概率論前面。

**實現

#include

#include

#include

using

namespace std;

int n,m;

//n--貓個數 m--m行資料

int p1,p2;

//p1勝p2

int ans[

505]

;//裝答案

int ai;

//ans的索引

priority_queue<

int> q1;

//大根堆 ----通過加入負數來實現小根堆的功能

int degree[

505]

;//裝每個點的入度

struct edge

;vector g[

505]

;void

add(

int u,

int v)

//加邊

//初始化

void

ini(

) ai=0;

}//拓撲排序

void

topo()

while

(!q1.

empty()

)}if(ai==n)

return;}

intmain()

topo()

;ini()

;}return0;

}

小結

拓撲排序的思路很清晰,是這個星期最簡單的一題作業。。。

拓撲排序 貓貓向前衝

眾所周知,tt 是一位重度愛貓人士,他有乙隻神奇的魔法貓。有一天,tt 在 b 站上 貓貓的比賽。一共有 n 只貓貓,編號依次為1,2,3,n進行比賽。比賽結束後,up 主會為所有的貓貓從前到後依次排名並發放愛吃的小魚幹。不幸的是,此時 tt 的電子裝置遭到了宇宙射線的降智打擊,一下子都連不上網了,...

貓貓向前衝(拓撲排序)

眾所周知,tt 是一位重度愛貓人士,他有乙隻神奇的魔法貓。有一天,tt 在 b 站上 貓貓的比賽。一共有 n 只貓貓,編號依次為1,2,3,n進行比賽。比賽結束後,up 主會為所有的貓貓從前到後依次排名並發放愛吃的小魚幹。不幸的是,此時 tt 的電子裝置遭到了宇宙射線的降智打擊,一下子都連不上網了,...

B 貓貓向前衝(拓撲排序

輸入有若干組,每組中的第一行為二個數n 1 n 500 m 其中n表示貓貓的個數,m表示接著有m行的輸入資料。接下來的m行資料中,每行也有兩個整數p1,p2表示即編號為 p1 的貓貓贏了編號為 p2 的貓貓。給出乙個符合要求的字典序最小的排名。輸出時貓貓的編號之間有空格,最後一名後面沒有空格 樣例 ...