HDU 2647 Reward(拓撲排序)

2021-06-07 22:01:44 字數 835 閱讀 4483

click here~~

題意:

老闆給員工發薪水,有的員工要求必須比某些員工薪水高。基礎薪水是888,問最少發多少薪水。

解題思路:

想要發的薪水最少,就要讓員工盡量只滿足要求即可,不必多發。

我們可以大致想象出員工的薪水大概是一層一層分布的,即888一層,889一層,依此類推,每層有若干個員工,但一定不會為0。(想想為什麼)

接下來,我們將員工依次從底層向上安排。

第一層的人肯定是那些沒有要求的員工,因為他們對工資沒有要求。

安排完第一層後,那些要求比第一層員工工資高的員工要求已經滿足,我們可以將這些已經滿足的要求刪除掉,然後繼續找當前沒有工資要求的員工,放入第二層。

依此類推。

我們發現,上述思路和拓撲排序極為相似。於是反向建圖後,稍加修改即可得到此題的解。

ps:又進rank了,囧。

#include #include #include using namespace std;

#define n 10005

struct t

e[n+n];

struct tt

v[n];

int top,ans,n,m;

void add_edge(int u,int v)

bool top_sort()

}q.pop();

}return cnt == n;

}int main()

printf("%d\n",top_sort() ? 888*n+ans : -1);

}return 0;

}

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 思路 反向建圖,...

HDU 2647 Reward(拓撲排序)

題意 春節來臨給員工發工資,有n名員工,m個要求,每個要求是 a b,意思a的工資要比b多。每個員工最低工資是888.問總共發放工資的最低是多少?思路 從最低工資拓撲排序.排序的方向就是從低到高,開始方向建錯,w好幾發 最低888,依次 1,沒有要求就是統一等級。include using name...