P3183 [HAOI2016]食物連鎖[トポロジー/メモリ検索]

トピック出典:羅区

タイトル説明

図の最初の回答に示す小さなチェーンによると、食物網のエコシステムの概略図である。今、あなたは食べ物を探している、n及びm種のエネルギーの流れの関係を問います。種名は1からようA1 b1a2 b2a3 B3としてエネルギーのM字状流との間のnの関係に番号付けされるAIがBI種の種からのエネルギーの流れ、単音を表し...... AM-1、BM-1AMのBMは、双愛孤立していない生物学的な食物連鎖

入出力フォーマット

入力フォーマット:

 

二つの整数n及びmの最初の行は、各列の次の2つの行が双方向整数m及びmは、エネルギーの流れとの間の関係を記述する愛。保証(入力データシンボルのデータは、生物学的特性を確保するため、重複したエネルギーの流れ関係を持っていない)1 <= N <= 100000 0 <= M <= 200000タイトル回答INTバーストありません

 

出力フォーマット:

 

食物網における食物連鎖の数である整数

 

サンプル入力と出力

入力サンプル#1: 
10 16 
1 2 
1 4 
1 10 
2 3 
2 5 
4 3 
4 5。
4.8。
6.5。
7.6。
7. 9。
8。5。
9。8。
10 6 
10 7 
10 9 
出力サンプル#1。 
9 

分析:
この問題は、比較的水、DPことがあります。
私は、言っても過言ではないの裸のトポロジカルソートを書きました。
具体的にコードを見て。
注:D []記憶装置であるを通じて小数点数における食物連鎖。また、この質問は、8つのテスト・ポイントが孤立ノードで提示されており、私が知っているどのように私に聞かないでください。

参照コード:

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <CStringの> 
の#include <cmath> 
の#include <アルゴリズム> 
書式#include < 文字列 > 
の#include <cstdlib> 
書式#include <キュー> 
の#include <ベクトル>
 の#define INF 0x3f3f3f3f
 #定義 PIのACOS(-1.0)
 の#define N 100010
 の#define MOD 2520
 の#define E 1E-12
 使用して 名前空間STDを、
キュー < 整数 > Q;
次、版。 2 ];
 int型のヘッド[N]、TOT、N-、M、ING [N]、CNT、D [N];
 BOOL V [N << 2 ];
 無効追加(int型 X、int型Y)を
{ 
    G [ ++ TOT] .VER = Y; 
    G [TOT] .next =頭部[X]、ヘッド[X] = TOT; 
    ING [Y] ++; // 今回の程度に数えることができる
}
 INT メイン()
{ 
    scanfの(" %のDの%のD "、およびN-、&M)
     のためのINT I = 1 ; I <= M; I ++ ){
         int型のX、Y。 
        のscanf(" %d個の%D "、およびX&Y)、
         IF(X == Y)続け
        追加(X、Y); 
    } 
    のためのINT I = 1 ; I <= N; I ++のIF(ING [ I] == 0 &&ヘッド[I] =!0)q.push(I)、D [I] = 1 ; //が向かうことができる[]孤立点を分析
    しながら(q.size())// 裸トポロジー
    {
         int型 X = q.front(); q.pop();
         IF(ヘッド[X] == 0)= CNT + D [X]; //は依然として[]の先頭バッチをエッジと判定された表示
        のInt I =ヘッド[X] ; I; I =G [I] .next)
        { 
            int型 Y = G [I] .VER; 
            D [Y] + = D [X]; // 点の数の食物連鎖を介して蓄積された
            IF(のIng [Y] == 0 )q.push(Y); 
        } 
    } 
    COUT << CNT << ENDL;
     戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/DarkValkyrie/p/11027305.html