hdu 2647 拓撲排序)

2021-09-06 10:14:39 字數 784 閱讀 5401

思路:就是乙個簡單的拓撲排序,給每個節點標號,不過要注意的是訪問過的節點的id應該取最大才能滿足要求,然後就是要反向建邊(這裡wa了好多次)。

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8#define maxn 10010

9 typedef pairpair;

10 vectormap[maxn];

11struct

point point[maxn];

14int

from

[maxn];

15int

n,m,ans,cnt;

1617

bool

solve() 25}

26while(!q.empty()) 38}

39}40if(cnt==n)return

true;41

return

false;42

}434445

intmain()

53 memset(from,0,sizeof(from

));54

while(m--)

59if

(solve()) else

65 puts("-1"

);66}67

return0;

68 }

view code

HDU 2647拓撲排序

還有乙個地方需要注意 判斷輸出 1的情況不能只判斷沒有乙個入度為0的點,因為有可能在中間就出現矛盾了,如 a b c d c 有入度為0的點,但卻要輸出 1 include include include includeusing namespace std define max 10005 int...

hdu 2647 拓撲排序

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

HDU 2647(拓撲排序)

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