傳送門
思路:拓撲排序+簡單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生物考試的時候,數食物鏈條數的題目全都錯了,因為她總是重複數了幾條或漏掉了幾條。於是她來就來求助你,然而你也不會啊!寫乙個程式來幫幫她吧。給你乙個食物網,你要求出這個食物網中最大食物鏈的數量。這裡的 最大食物鏈 指的是生物學意義上的食物鏈,即最左端是不會捕食其他生物的生產者...