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