HDU 2647 再說一道拓撲排序 Reward

2021-09-12 18:43:38 字數 814 閱讀 1968

//ac

//hdu 2647

#include#include#include#includeusing namespace std;

const int maxn1=20005;

const int maxn2=10005;

long long res=0;

struct node

edge[maxn1];

int indegree[maxn2];

int head[maxn2];

int ans[maxn2];

int money[maxn2];

int cnt=1;

int cnt2=1;

int n,m;

void add(int from,int to)

void topo()

}while(!q.empty())

if(indegree[edge[j].to]==0)}}

}int main()

topo();

//cout<<"cnt2:"《演算法競賽的題目總是千變萬化,但是我又很笨,,每次都去找一些別人的測試資料,以此來糾正自己的**。希望以後自己要不依靠平台,不依靠討論區,自己找到測試資料。

這道拓撲,寫了一半的時候,覺得應該將輸入時邊的輸入點和出點顛倒過來,更容易。

套用模板。

然後,給乙個測試資料讓我發現了wa點:

5 41 22 5

2 44 3

答案:4446

就是,該組2號有兩個路徑,2->5  和 2->4->3。要注意,其中要取最大的金額。

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