問題 B PIPI發工資 拓撲排序遍歷

2021-10-04 13:19:28 字數 1206 閱讀 8470

pipi開了乙個工廠,工廠裡面有許許多多的員工。每次要發工資的時候pipi就開始思考了,如何才能給員工發最少的工資呢?

發工資的原則是這樣的: 每個員工的工資都是乙個整數,其中基本工資是888元,但是如果 a 是 b的上司,那麼a的工資就要比b高。

現在給出員工的數量和員工之間的關係,pipi想問下胖虎他最少要發多少錢??

輸入包含多組測試用例。

對於每一組測試用例,第一行包含兩個整數 n (n<=10000)和 m (m<=20000)。表示pipi工廠裡面員工數量以及員工之間的關係數目。

接下來m行每一行包含兩個整數 a和 b 。代表 a 是 b的的上司(1<=a,b<=n)。

對於每組測試用例,輸出pipi最少需要發多少工資。如果pipi沒辦法發工資,輸出-1。

2 11 2

2 21 2

2 11777

-1ps:一開始想用動態規劃計算工資後來發現無法判斷是否有有向環

並查集只能找無向環

想要找有向環有種2途徑,拓撲排序和深搜

拓撲排序遍歷

可以判斷是否有環

#include

#include

#include

using namespace std;

int n,m;

int indegree[

10005];

int salary[

10005];

int head[

10005];

struct edgeedge[

20000];

int t;

void

add(

int u,

int v)

intmain()

for(i=

0;i)for

(i=1

;i<=n;i++)if

(!indegree[i]

) s.

push

(i);

while

(!s.

empty()

)}if(countfor(i=

1;i<=n;i++

) ans+

=888

*n;printf

("%d\n"

,ans);}

return0;

}

HDU 2647 Reward 拓撲排序發工資

題目 有n個工人,有些人有要求要比別的某個人工資高,滿足這些全部要求最少發的工資,底線是888。第一行n,m 剩下的m行要求,不能滿足輸出 1 否則輸出最小發工資數。sample input 2 11 2 2 21 2 2 1sample output 1777 1從初始入度便為0的點到達入度減到0...

拓撲排序問題

拓撲排序問題 1.最小生成樹和最端路徑屬於有環的圖應用。拓撲排序和關鍵路徑屬於無環的圖應用。無環,即圖中沒有迴路的意思。2.拓撲排序介紹 在乙個表示project的有向圖中。用頂點表示活動,用弧表示活動之間的優先關係,這種有向圖稱為頂點表示活動的網,我們稱之為aov網 activity on ver...

拓撲排序模板加例題(拓撲排序問題彙總)

概念 乙個有向無環圖的拓撲序列是將圖中的頂點排成乙個線性序列,使得對於圖中任意一對頂點u,v。若存在邊,則線性序列中u出現在v之前。演算法實現 1 若圖中的點入度均大於0則不存在拓撲序列,否則進行第二步 2 取乙個入度為0的點u並將其放置序列末尾 3 刪除點u以及從u伸出的邊,即將與u相連的點的入度...