食物連鎖のP4017の最大数(トポロジカルソート/高校の生物)

質問の意味:食物連鎖の数を見つけ、あなたの食物網を与えます
解決策:
1.セットF(i)は、私は食物連鎖の最後の数(ここでは食物連鎖のは必ずしも完全なものではありません)です
。2.食物網を確立するプロセスでは、それぞれの種のために、種の数とその獲物を記録しますそれは、(i)とOUT(I)で表される捕食種の数であり、
3は、(i)生物学0、それらがキュー投げた初期化F [I] = 1で見つかった
前記第1のキューUは、その後、捕食者vの全てを列挙し、生物種を引き出すF [V] = F [V ] + F [U]。
5. Uは捨て、そう(v)はマイナス1でてきたので。もし、この時点で(v)のうち(v)は、食物連鎖の最後に来ANS(答)プラスFようました、それは最高の栄養段階であることを示し、また、ゼロの場合は0、キューに入れますが、この時間です[V]に
6.を繰り返し4,5-ステップ、キューが空になるまで
7出力回答
はO(n)の時間複雑性は、しかし、このアルゴリズムは、生物学的試験(ヘイズ)で有用であることを保証するものではありません
タイトルアドレスを:
 HTTPS ://www.luogu.com.cn/problemnew/show/P4017
1の#include <ビット/ STDC ++ H>
 2  の#defineは 80112002国防省
 3を 使用して 名前空間STDを、
4  整数 N、M、U、V、CNT、ANS、ヘッド[ 5003 ]  [ 5003 ]、アウト [ 5003 ]、F [ 5003 ]。
5  構造体のエッジ{
 6      int型V、次。
7 } E [ 500005 ]。
8キュー< 整数 > Q;
9  ボイド追加(INT U、INT V){
 10     E [++ CNT] .V = V。
11      E [CNT] .next = 頭部[U]。
12      頭[U] = CNT。
13      アウト [U] ++ ;
14       [V] ++ ; 
15  }
 16  INT メイン(){
 17の      IOS :: sync_with_stdio()。
18      CIN >> N >> M。
19      のためにINT iは= 1 ; iが<= M; I ++ ){
 20          CIN >> U >> V。
21          追加(U、V)。
22      }
 23    のためにINTiは= 1 ; I <= N; I ++ 24        であれば(![i])と
 25            F [I] = 1 、q.push(I)。
26      ながら(!{q.empty())
 27          INT U = q.front(); q.pop()。
28          のためにINT ; I iが= [U] iはヘッド= {E [I] .next)
 29              のint V = E [I] .V。
30              F [V] =(F [V] + F [U])%のMOD。
31               [V] - 32              であれば [V] == 0 ){
 33                  であればアウト [V] == 0 34                      ANS =(ANS + [V])%のF MOD。
35                  q.push(V);
36              } 
 37          }
 38      }    
 39      COUT << ANS。
40 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/vv123/p/12343708.html