接続及び非環式のグラフはツリーと考えることができます。木の高さは、選択したルートに依存します。今、あなたは最高の木につながるルートを見つけることになっています。このようなルートは、最も深い根と呼ばれています。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は整数正含ま N(ノードの数であり、したがってノードは1から番号が付けられている≤) 次にN. N - 1行が続くが、それぞれが与えられた2つの隣接ノードによってエッジを記述する「数字。
出力仕様:
各テストケースのために、ラインの最も深い根のそれぞれを印刷します。そのようなルートが一意でない場合は、その番号の昇順でそれらを印刷します。与えられたグラフがツリーでない場合に、印刷 Error: K components
場所 K
グラフにおける連結成分の数です。
サンプル入力1:
5
1 2
1 3
1 4
2 5
サンプル出力1:
3
4
5
サンプル入力2:
5
1 3
1 4
2 5
3 4
出力例2:
Error: 2 components
トピック分析:最初の私に連結グラフのために私は思うの質問の意味を誤解しますが、実際には何のループがありません
そこ回路が切断されなければなりません
また、遠大な効果ベクトル<ベクトル<int型>>を持っていたことは、メモリ空間の配列を使用するノートが優れています
1 の#define _CRT_SECURE_NO_WARNINGS 2の#include <iostreamの> 3の#include <ベクトル> 4の#include <キュー> 5の#include <積層体> 6の#include <アルゴリズム> 7 使用して 名前空間をSTD。 8 INT =最高- 1 。 9ベクトル<ベクトル< 整数 >> G。 10 INTディスト[ 10001 ]。 11 INT収集[ 10001 ]。 12 int型N。 13の INT成分= 1; 14ベクター< INT > V。 15の ボイド DFS(int型V) 16 { 17 [V] =収集1 。 18 のために(INT iは= 0 ; iは<G [V] .size(); I ++ ) 19 { 20 であれば(!収集[G [V] [I]) 21 { 22 ディスト[G [V] [I] ] =ディスト[V] + 1 。 23の DFS(G [V] [I])。 24 } 25 } 26 } 27 INT main()の 28 { 29 CIN >> N。 30 G.resize(N + 1 )。 31 のために(INT iが= 1 ; I <Nであり; I ++ ) 32 { 33 のint V1、V2は、 34 CIN >> V1 >> V2。 35 G [V1] .push_back(V2)。 36 G [V2] .push_back(V1)。 37 } 38 のint i = 1 。 39 のために(; I <= N; iは++ ) 40 { 41 フィル(ディスト、ディスト+ N + 1、0 ); 42 充填(+ N +収集し、収集され1、0 ); 43の DFS(I)。 44 のために(INT J = 1 ; J <= N; J ++ ) 45 { 46 であれば(!収集[J]) 47 { 48 DFS(J)。 49の コンポーネント++ ; 50 } 51 } 52 であれば(コンポーネント!= 1 ) 53 ブレーク; 54 INTマックス= - 65535 ; 55 のために(INTは iは= 1 ; I <= N I ++ ) 56 であれば(最大< ディストリ[I]) 57 マックス= ディストリ[I]。 58 であれば(最大> 最高) 59 { 60 最高= マックス。 61 V.clear()。 62 V.push_back(I)。 63 } 64 他の 場合(最大== 最高) 65 V.push_back(I); 66 } 67 であれば(コンポーネント== 1 ) 68 { 69 のために(INTは iは= 0 ; I <V.size() - 1 ; I ++ ) 70 のprintf(" %D \ n " 、V [I])。 71 のprintf(" %dの"、V [V.size() - 1 ])。 72 } 73 他の 74 のprintf(" エラー:%d個のコンポーネント" 、コンポーネント)。 75 リターン 0 ; 76 }