トピック出典:羅区
タイトル説明
図の最初の回答に示す小さなチェーンによると、食物網のエコシステムの概略図である。今、あなたは食べ物を探している、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 ; }