問題の説明
N暁明の実験室のコンピュータ、番号1〜N. もともとコンピュータNとの間にN-1番目のデータリンクを接続していた、まさにツリーネットワークを形成します。ツリーネットワーク上で、任意の2台のコンピュータ間で一意のパスに接続されています。
それは、データのリンクを追加しますので、ループネットワークように、しかし、最近ではネットワーク、2台のコンピュータ間誤動作の管理者を維持します。いずれか2つの間のループ上のコンピュータので、データ送信がこれらのコンピュータのバグで発生しそうという、もはや唯一の道ではありません。
通常の送信を回復するために。暁明の必要性は、あなたが彼を助けることができ、ループ上のすべてのコンピュータを見つけるには?
それは、データのリンクを追加しますので、ループネットワークように、しかし、最近ではネットワーク、2台のコンピュータ間誤動作の管理者を維持します。いずれか2つの間のループ上のコンピュータので、データ送信がこれらのコンピュータのバグで発生しそうという、もはや唯一の道ではありません。
通常の送信を回復するために。暁明の必要性は、あなたが彼を助けることができ、ループ上のすべてのコンピュータを見つけるには?
入力形式
最初の行は、整数Nを含んでいます
二つの整数aとbの次のNラインは、aとbとの間で表現されたデータリンクに接続されています。
データの30%、1 <= N <= 1000件のために
100%にデータ、1 <= N <= 100000 、1 <= B <= Nの
入力が有効保証。
二つの整数aとbの次のNラインは、aとbとの間で表現されたデータリンクに接続されています。
データの30%、1 <= N <= 1000件のために
100%にデータ、1 <= N <= 100000 、1 <= B <= Nの
入力が有効保証。
出力フォーマット
ループ上の多数順次出力に小さいから、コンピュータによって、中間領域により分離。
サンプル入力
5
1 2
3 1
2 4
2 5
5 3
1 2
3 1
2 4
2 5
5 3
サンプル出力
1 2 3 5
+のDFS互いに素セット
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <ベクトル> 4の#include <CStringの> 5 6 使用して 名前空間STDを、 7 8 CONST 整数 N = 100000 + 5 。 9 10ベクター< INT > V [ 2 * N]。 11 INT 親[N]、S、E、N。 12 INT VIS [N] = { 0 }。 13 14 ボイドのinit() 15 { 16 のために(int型私は= 0を。I <= N。I ++ ){ 17 親[I] = I。 18 } 19 20 } 21 22 int型の検索(int型A) 23 { 24 リターン親[A] == A?A:(親[A] = 検索(親[A])); 25 } 26 27 ブール連合(int型、int型B) 28 { 29 // COUT << << "PAR" << B << ENDL。 30 = 検索(); 31 B =検索(B); 32 33は、 IF(A == B){ //はリング構成 34は リターン trueに; 35 } 36 他{ 37 [ 親[A] = B; 38は リターン falseに; 39 } 40 } 41である 42れる ボイド DFS(INT U) 43は 、{ 44である // COUT E << ENDL << << U; 45 46である IF(U == E){ // 端に達する 47 // COUT N - << << "が出力されます:"。 48 のために(INT iは= 1 ; iが<= N; I ++ ){ 49 // COUT << I << ":" << VIS [I] << ENDL。 50 であれば(VIS [I]){ 51 COUT << I。 52 のprintf((I == N)?" \ nは":" " ); 53 // coutの<<((I == n)はENDL:? "「); 54 } 55 } 56 リターン。 57 } 58 // 他COUT < 59 60 のために(INTは iは= 0 ; I <V [U] .size(); I ++ ){ 61 INT次= V [U] [I]。 62 であれば(VIS [次] == 0 ){ 63 VIS [次] = 1 。 64の DFS(次) 65 VIS [次] = 0 ; 66 } 67 } 68 リターン。 69 } 70 71 のint main()の 72 { 73 CIN >>N; 74 75 のinit(); 76 77 のために(INT iが= 0 ; iが<N; I ++ ){ 78 INT U、Vは、 79 80 CIN >> U >> V; 81 // coutの<< U << "初期化" << V <<てendl; 82 であれば(ユニオン(U、V)){ // 已构成环 83 84 S = U、E = V。 85 ブレーク; 86 } 87 他{ 88 V [U] .push_back(V)。 89 V [V] .push_back(U)。 90 } 91 } 92 93 // COUT << "開始" << S << "端" << E << ENDL。 94 95 VIS [S] = 1 。 96の DFS(S)。 97 98 戻り 0 ; 99 100 }