技能修煉 拓撲排序

2022-09-23 16:33:12 字數 1156 閱讀 5726

description

寒假第三次周賽強勢襲來,首先祝願大能依靠自己所學的取得乙個好成績。學習之餘,我們在這裡說乙個有關遊戲的問題,你來解決一下。一般的遊戲中人物技能在修煉時有個特點,就是後面的技能一般都要修煉了前面的某些個才可以修煉。比如10級有乙個技能火彈術,20級有乙個火焰術,那麼此時假如你沒修煉10級的火彈,你就不能直接修20級的火焰術,就是這樣的道理。現在的問題是,給定一些個技能間的依賴關係,你來寫程式來判斷該以什麼樣的順序來修煉這些技能。為了簡化問題,我們用數代表不同的技能,乙個數代表一種技能,輸入形式n1 n2則代表n1是n2的前置技能。

input

本題有多組測試資料,每組中第一行為兩個數n(1 <= n <= 500)和m(1 <= m <= n*(n-1)/2),其中n表示技能總數,接下來有m行。每行是代表兩個技能的數字n1和n2,表示n1是n2的前置技能。

output

對每組測試資料,輸出確定下來的技能修煉順序,要求對於輸入的每組資料,輸出一行,一行中各技能之間以乙個空格間隔(行尾不該有空格而是換行符)。

注意,對於排序的結果可能不是唯一的,這時要求先輸出代表技能的數較小的。

sample input

4 31 2

2 34 3

sample output

1 2 4 3

hint

對於上面的樣例中2和4都是3的前置技能,但是數字2較小,因此先輸出2。

拓撲排序練習題,沒用棧,用優先佇列實現

#include///拓撲排序

#include

#include

using namespace std;

bool ma[502][502];

int vis[502];

int main()

{ int n,m;

while(scanf("%d%d",&n,&m)!=eof)

{int from,to;

priority_queue,greater >q;

while(!q.empty())q.pop();

memset(vis,0,sizeof(vis));

memset(ma,false,sizeof(ma));

for(int i=0;i

=n;i++)if(!vis[i])q.push(i),vis[i]=-1;>

Hust oj 1631 技能修煉(拓撲排序)

技能修煉 time limit 1000 ms memory limit 32768 k total submit 39 25 users total accepted 26 24 users rating special judge no description 寒假第三次周賽強勢襲來,首先祝願大...

哈理工OJ 1631 技能修煉(拓撲排序)

技能修煉 time limit 1000 ms memory limit 32768 k total submit 38 24 users total accepted 25 23 users rating special judge no description 寒假第三次周賽強勢襲來,首先祝願大...

哈理工OJ 1631 技能修煉 拓撲排序模板

哈理工oj 1631 技能修煉 技能修煉 description 寒假第三次周賽強勢襲來,首先祝願大能依靠自己所學的取得乙個好成績。學習之餘,我們在這裡說乙個有關遊戲的問題,你來解決一下。一般的遊戲中人物技能在修煉時有個特點,就是後面的技能一般都要修煉了前面的某些個才可以修煉。比如10級有乙個技能火...