拓撲排序模板 hdu2647

2021-08-09 04:41:17 字數 1408 閱讀 8671

模板:

#include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 1005; //最大邊數

int n; //點數

vector

edge[maxn]; //鄰接表

queue

q; //維護乙個入度為0的集合

int indegree[maxn]; //記錄每個頂點的入度

void init()

void addedge(int from, int to)

bool topological_sort()

}if(cnt < n)

return

false; //有迴路

else

return

true;

}int main()

if(!topological_sort())

cout

<< "-1"

<< endl;

return0;}

/*65 25 0

4 04 1

2 33 1

*/

hdu2647題意:

有n個人,m個關係,a,b代表a應得的工資比b多,最低工資888,,要讓所有人滿意,求老闆最少給多少工資。不可能完成輸出-1。

/*

by : zhangfy

*/#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 20005; //最大邊數

int n; //點數

vector

edge[maxn]; //鄰接表

queue

q; //維護乙個入度為0的集合

int indegree[maxn]; //記錄每個頂點的入度

int reward[maxn]; //記錄每個點應得的錢

void init()

void addedge(int from, int to)

void topological_sort()

}if(cnt == n)

else

cout

<< "-1"

<< endl;

}int main()

topological_sort();

}return

0;}

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...