vue元件彈框過渡動畫效果,如:點選顯示為從左到右滑動,收回隱藏為從右到左滑動
阿新 • • 發佈:2020-12-09
題目背景
你知道食物鏈嗎?Delia 生物考試的時候,數食物鏈條數的題目全都錯了,因為她總是重複數了幾條或漏掉了幾條。於是她來就來求助你,然而你也不會啊!寫一個程式來幫幫她吧。
題目描述
給你一個食物網,你要求出這個食物網中最大食物鏈的數量。
(這裡的“最大食物鏈”,指的是生物學意義上的食物鏈,即最左端是不會捕食其他生物的生產者,最右端是不會被其他生物捕食的消費者。)
Delia 非常急,所以你只有11秒的時間。
由於這個結果可能過大,你只需要輸出總數模上8011200280112002的結果。
輸入格式
第一行,兩個正整數n、mn、m,表示生物種類nn和吃與被吃的關係數mm。
接下來mm行,每行兩個正整數,表示被吃的生物A和吃A的生物B。
輸出格式
一行一個整數,為最大食物鏈數量模上8011200280112002的結果。
輸入輸出樣例
輸入 #1複製
5 7
1 2
1 3
2 3
3 5
2 5
4 5
3 4
輸出 #1複製
5
說明/提示
各測試點滿足以下約定:
【補充說明】
資料中不會出現環,滿足生物學的要求。(感謝 @AKEE )
剛開始理解錯題意了2333
正解:求這個有向無環圖中有共有幾條食物鏈,每條食物鏈必須是 最弱者到最強者。
很明顯這跟拓撲排序有關。
操作:
1. 記錄每個點的出度跟入度。
2. 找到入度為0的一個點i,將與它相連的邊刪掉,相連的點j的入度-1。那麼有f[j]=f[j]+f[i],即從i到j的路線數。期間有入度為0的點進入佇列,當有點出度跟入度都為0,說明這條食物鏈結束了。
3.不斷重複2.
拓撲排序可以判斷有向圖是否有環,若經過上面的三步還有點剩餘,說明這個圖是有環的。
#include <bits/stdc++.h> using namespace std; const int mod=80112002; int in[5005],out[5005],f[5005],a[5005][5005]; queue<int> q; int main() { int n,m,x,y,k,ans=0; cin>>n>>m; for(int i=1; i<=m; i++){ cin>>x>>y; out[x]++;//出度 in[y]++;//入度 a[x][y]=1; } for(int i=1; i<=n; i++){//f[i]表示從食物鏈的起點到i有幾條路 if(in[i]==0){//此時i為食物鏈起點 f[i]=1;//i到i只有一條路線 q.push(i);//入讀為0點入隊 } } while(!q.empty()){ x=q.front(); q.pop(); for(int i=1; i<=n; i++){ if(a[x][i]){//找跟i相連結的點 in[i]--;//入度減1 a[x][i]=0;//刪掉邊 f[i]=(f[x]+f[i])%mod; if(in[i]==0){ q.push(i); } if(in[i]==0&&out[i]==0){//已經到食物鏈的最高階 ans=(ans+f[i])%mod; } } } } cout<<ans<<endl; return 0; } //拓撲排序