hdu 2647
題意:輸入n行資料a,b ,表示a的錢數大於b的錢數,最低的人分的的錢數為888,問最少需要多少錢可以分給員工
思路:標準的拓撲排序,不過這題需要逆向拓撲
注意點:1、如何判斷途中有換,或者說有的點沒有選擇到,用個int整型cnt,利用拓撲排序的特點,每個點只查詢一次,所以當cnt==n的時候,輸出sum。
2、多組輸入不要忘了初始化陣列之類的
1 #include 2 #include 3 #include 4 #include 5 #include6 #include 7 #include 8 #include 9 #include 10 #include 11 #include
12 #include 13
//const int maxn = 1e5+5;
14#define ll long long
15#define max int_max
16#define for(i,a,b) for( ll i = a;i <= b;++i)
17using
namespace
std;
18int
n,m,sum,head,headmoney,a,b,cnt;
19int degree[11000
]; //度,我就不多說了
20 vectorvec[11000
]; //存此節點下的子節點
21 queueque; //存接下來思考的節點
22int
main()
234344}
4546
for(int i=1;i<=n;++i)
4755}56
while(!que.empty())
5772}73
}74if(cnt==n)
7578
else cout<<"-1"
<7980
8182}83
84 }
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 拓撲排序)
思路 就是乙個簡單的拓撲排序,給每個節點標號,不過要注意的是訪問過的節點的id應該取最大才能滿足要求,然後就是要反向建邊 這裡wa了好多次 1 include2 include3 include4 include5 include6 include7 using namespace std 8 de...