題意是給你n點m條有向邊,葉子點(出度為0)上的值為888,父親點為888+1,依次計算... 讓你求最小的值,但是中間出現有向環就不行了,輸出-1。
拓撲排序佇列實現,因為葉子是最小的,所以把邊反向就可以求了。
//拓撲佇列實現
//就是先把入度為0的先入隊,然後每次出隊的時候把相鄰的點的入度減1,要是入度為0則再入隊,不斷迴圈直到隊列為空
//時間複雜度為o(n + e)
//這題就是把邊反向就好了
#include #include
#include
#include
#include
using
namespace
std;
const
int maxn = 1e4 + 5
;typedef pair
p;vector
g[maxn];
intdu[maxn];
intmain()
for(int i = 0 ; i < m ; i++)
queue
que;
while(!que.empty())
int cont = 0 , res = 0
;
for(int i = 1 ; i <= n ; i++)
}while(!que.empty()) }}
if(cont ==n)
else
}}
HDU 2647 Reward(拓撲排序)
click here 題意 老闆給員工發薪水,有的員工要求必須比某些員工薪水高。基礎薪水是888,問最少發多少薪水。解題思路 想要發的薪水最少,就要讓員工盡量只滿足要求即可,不必多發。我們可以大致想象出員工的薪水大概是一層一層分布的,即888一層,889一層,依此類推,每層有若干個員工,但一定不會為...
hdu 2647 Reward ( 拓撲排序 )
統計各結點出度,出度為0的點表示他們 a類 所需的reward為888,而reward要比他們多的 b類 則為888 1,reward要比b類多的 c類 則為888 2.其中若一開始從a類得到了b類,然後有某個b類要比另乙個b類的reward多,則該b類的reward從888 1改為888 2.以此...
hdu2647 Reward(拓撲排序)
老闆要給很多員工發獎金,但是部分員工有個虛偽心態,認為自己的獎金必須比某些人高才心理平衡 但是老闆很人道,想滿足所有人的要求,並且很吝嗇,想畫的錢最少 輸入若干個關係 a ba c c b意味著a 的工資必須比b的工資高 同時a 的工資比c高 c的工資比b高 當出現環的時候輸出 1 思路 反向建圖,...