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

2021-10-10 01:31:40 字數 1446 閱讀 9088

題目背景

你知道食物鏈嗎?delia 生物考試的時候,數食物鏈條數的題目全都錯了,因為她總是重複數了幾條或漏掉了幾條。於是她來就來求助你,然而你也不會啊!寫乙個程式來幫幫她吧。

題目描述

給你乙個食物網,你要求出這個食物網中最大食物鏈的數量。

(這裡的「最大食物鏈」,指的是生物學意義上的食物鏈,即最左端是不會捕食其他生物的生產者,最右端是不會被其他生物捕食的消費者。)

delia 非常急,所以你只有 111 秒的時間。

由於這個結果可能過大,你只需要輸出總數模上 801120028011200280112002 的結果。

輸入格式

第一行,兩個正整數 n、mn、mn、m,表示生物種類 nnn 和吃與被吃的關係數 mmm。

接下來 mmm 行,每行兩個正整數,表示被吃的生物a和吃a的生物b。

輸出格式

一行乙個整數,為最大食物鏈數量模上 801120028011200280112002 的結果。

輸入輸出樣例

輸入 #1

5 71 2

1 32 3

3 52 5

4 53 4

輸出 #1

說明/提示

各測試點滿足以下約定:

【補充說明】

資料中不會出現環,滿足生物學的要求。(感謝 @akee )

#include

#include

#include

//#define int long long

using

namespace std;

const

int mod =

80112002

;const

int maxn =

5e3+10;

int rd[maxn]

;int cd[maxn]

;bool vis[maxn]

;int a[maxn]

[maxn]

;int value[maxn]

;int n, m;

signed

main()

queue<

int>que;

for(

int i =

1; i <= n; i++)if

(rd[i]==0

) que.

push

(i), value[i]=1

;while

(!que.

empty()

)}}int ans =0;

for(

int i =

1; i <= n; i++)if

(cd[i]==0

) ans =

(ans + value[i]

)% mod;

cout << ans;

return0;

}

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

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

P4017 最大食物鏈計數

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

P4017 最大食物鏈計數

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