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

2021-10-09 06:05:08 字數 1588 閱讀 2990

題目

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

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

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

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

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

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

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

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

輸入 #1

571

2132

3352

5453

4

輸出 #1

5
拓撲排序每次第一輪刪點刪掉的一定為最優生產者tata

ta的答案為1

11所以將tata

ta能到達的點全部加上tata

ta的答案(加111)

記錄出度用來尋找最優消費者

最後累加所有最優消費者的答案 輸出

#include

#include

#include

#include

#define mod 80112002

using

namespace std;

typedef

long

long ll;

//不開long long見祖宗

ll n,m,head,tail,ans,tot,h[

10005

],in[

10005

],out[

10005

],f[

10005

],que[

10005

],aa,b;

struct nodea[

500005];

void

add(ll x,ll y)

;//鄰接表

h[x]

=tot;

}void

topsort()

//拓撲排序

while

(headelse que[

++tail]

=a[i]

.to;

//入隊}}

}}intmain()

topsort()

;printf

("%lld"

,ans%mod)

;return0;

}

P4017 最大食物鏈計數(洛谷)

傳送門 這道題就是記憶化搜尋。中文題面,不解釋 這道題拓撲排序,存在 不存在拓撲路徑都得算入。用鄰接表實現 根據題目的最大食物鏈的規定,我們需要從出度為零的點開始搜,一直搜到入度為零的點結束。也可以從入度為0的點開始,到出度為0的點結束 這樣算一條路徑。然後累加即可。用vis標記一下。即我們從出度為...

洛谷 P4017 最大食物鏈計數

看到這種明顯的有向無環圖,並且等級分明,自然而然就能想到拓補排序啦。對於這道題,我們就可以利用最短路計數的那種思想 不知道也沒關係 設 j 是 i 的後繼,dis i 表示以 i 為結尾有多少條食物鏈,那麼就可以得到 dis j dis i 然後往後面推,直到拓補排序結束。因為題目要求的是沒有可以吃...

洛谷 P4017 最大食物鏈計數

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