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相連的點的入度...