HDU 2647拓撲排序

2021-06-18 03:47:15 字數 411 閱讀 5786

還有乙個地方需要注意:判斷輸出-1的情況不能只判斷沒有乙個入度為0的點,因為有可能在中間就出現矛盾了,如:a——>b——>c——>d——>c 有入度為0的點,但卻要輸出-1;

#include#include#include#includeusing namespace std;

#define max 10005

int n,sum,ans;

int into[max],head[max],money[max];

struct reward

edge[2*max];

void topu()}}

}int main()

topu();

if(ans!=n)//有可能在中間出現矛盾,必須保證每個地方都不矛盾

sum=-1;

cout<

hdu 2647 拓撲排序

題意 就是後面的人必須比前面的人領的前多1,每個人至少888,問要總共要多少錢。思路 裸的的拓撲排序,因為是佇列,層數是一層一層遞進的,所以當那個點度數為0時,必然是最後消失的前驅的v 1,這時的v 1顯然最大。include using namespace std define mod 10000...

hdu 2647 拓撲排序)

思路 就是乙個簡單的拓撲排序,給每個節點標號,不過要注意的是訪問過的節點的id應該取最大才能滿足要求,然後就是要反向建邊 這裡wa了好多次 1 include2 include3 include4 include5 include6 include7 using namespace std 8 de...

HDU 2647(拓撲排序)

hdu 2647 題意 輸入n行資料a,b 表示a的錢數大於b的錢數,最低的人分的的錢數為888,問最少需要多少錢可以分給員工 思路 標準的拓撲排序,不過這題需要逆向拓撲 注意點 1 如何判斷途中有換,或者說有的點沒有選擇到,用個int整型cnt,利用拓撲排序的特點,每個點只查詢一次,所以當cnt ...