P4017 最大食物鏈計數 拓撲排序 簡單dp

2021-10-06 11:37:15 字數 996 閱讀 2975

傳送門

思路:拓撲排序+簡單dpdp

dp。顯然每個最大食物鏈起點為是入度為0的點,終點是出度為0的點,這樣我們只需要統計每個出度為0的點的最大食物鏈貢獻,最後求和。

設a ns

[i

]ans[i]

ans[i]

為從所有入度為0點到達該點的路徑數。

顯然對於相連邊有轉移方程:ans

[v]+

=ans

[u

]ans[v]+=ans[u]

ans[v]

+=an

s[u]

時間複雜度:o(n

+m

)o(n+m)

o(n+m)

ac**:

#include

using

namespace std;

typedef

long

long ll;

const

int n=

5e3+

5,mod=

80112002

;#define mst(a) memset(a,0,sizeof a)

int in[n]

,n,m,out[n]

;ll ans[n]

;vector<

int>e[n]

; ll toposort()

} ll res=0;

for(

int i=

1;i<=n;i++

)//求和if(

!out[i]

) res=

(res+ans[i]

)%mod;

return res;

}int

main()

printf

("%lld\n"

,toposort()

);return0;

}

P4017 最大食物鏈計數 拓撲排序

題目背景 你知道食物鏈嗎?delia 生物考試的時候,數食物鏈條數的題目全都錯了,因為她總是重複數了幾條或漏掉了幾條。於是她來就來求助你,然而你也不會啊!寫乙個程式來幫幫她吧。題目描述 給你乙個食物網,你要求出這個食物網中最大食物鏈的數量。這裡的 最大食物鏈 指的是生物學意義上的食物鏈,即最左端是不...

P4017 最大食物鏈計數 拓撲排序

你知道食物鏈嗎?delia生物考試的時候,數食物鏈條數的題目全都錯了,因為她總是重複數了幾條或漏掉了幾條。於是她來就來求助你,然而你也不會啊!寫乙個程式來幫幫她吧。給你乙個食物網,你要求出這個食物網中最大食物鏈的數量。這裡的 最大食物鏈 指的是生物學意義上的食物鏈,即最左端是不會捕食其他生物的生產者...

P4017 最大食物鏈計數

你知道食物鏈嗎?delia生物考試的時候,數食物鏈條數的題目全都錯了,因為她總是重複數了幾條或漏掉了幾條。於是她來就來求助你,然而你也不會啊!寫乙個程式來幫幫她吧。給你乙個食物網,你要求出這個食物網中最大食物鏈的數量。這裡的 最大食物鏈 指的是生物學意義上的食物鏈,即最左端是不會捕食其他生物的生產者...