HDU 5695 Gym Class 拓撲排序

2022-03-31 15:08:36 字數 975 閱讀 8405

眾所周知,度度熊喜歡各類體育活動。

今天,它終於當上了夢寐以求的體育課老師。第一次課上,它發現乙個有趣的事情。在上課之前,所有同學要排成一列, 假設最開始每個人有乙個唯一的id,從1到n,在排好隊之後,每個同學會找出包括自己在內的前方所有同學的最小id,作為自己評價這堂課的分數。麻煩的是,有一些同學不希望某個(些)同學排在他(她)前面,在滿足這個前提的情況下,新晉體育課老師——度度熊,希望最後的排隊結果可以使得所有同學的評價分數和最大。

第一行乙個整數t,表示t(1≤t≤30) 組資料。

對於每組資料,第一行輸入兩個整數n和m(1≤n≤100000,0≤m≤100000),分別表示總人數和某些同學的偏好。

接下來m行,每行兩個整數a 和b(1≤a,b≤n),表示id為a的同學不希望id為b的同學排在他(她)之前。你可以認為題目保證至少有一種排列方法是符合所有要求的。

對於每組資料,輸出最大分數 。

31 0

2 11 2

3 13 112

6在滿足拓撲關係的條件下,每次貪心扔乙個最大的上去就好了

然後最後在統計一下答案就可以了

#include#include#include#include#include#includeusing namespace std;

const int maxn = 1e5+7;

int n,m;

int a[maxn],d[maxn];

vectore[maxn];

priority_queueq;

void init()

void solve()

for(int i=1;i<=n;i++)

int tot = 0;

while(!q.empty())

}long long ans = 0;

int tmp = 1e9;

for(int i=0;icout<}int main()

HDU 5695(拓撲排序,最大權優先佇列)

拿到這題,看到a後面是b的要求,就能想到一條a指向b的邊,a入度為0應該先考慮,a考慮了,b的入度就變成了0就該接著考慮,就可以想到用拓撲排序,維護乙個最大優先權佇列,先將入度為0全部入列,然後挨個pop維護minn並累加進ans裡,每次都要記得更新節點入度,出現0就入列,佇列空時即為結束,輸出an...

G 產生冠軍 HDU 2094

有一群人,打桌球比賽,兩兩捉對撕殺,每兩個人之間最多打一場比賽。球賽的規則如下 如果a打敗了b,b又打敗了c,而a與c之間沒有進行過比賽,那麼就認定,a一定能打敗c。如果a打敗了b,b又打敗了c,而且,c又打敗了a,那麼a b c三者都不可能成為冠軍。根據這個規則,無需迴圈較量,或許就能確定冠軍。你...

2018江蘇省賽G題(hdu6282)

hdu6268 題意 給你aa,bb,abab這樣的三個字串,和兩個字串s,t,讓你在t中任意刪除或者插入任意多個aa,bb,abab,最後得到t。題解 思維題,簡單手畫畫就可以得出乙個結論,aa,bb,abab,可以得到任意由,a和b組成的且a和b的個數為都為偶數個的字串。這樣s可以變成t就要求c...