リングリング!!!!!!!!

問題の説明
  N暁明の実験室のコンピュータ、番号1〜N. もともとコンピュータNとの間にN-1番目のデータリンクを接続していた、まさにツリーネットワークを形成します。ツリーネットワーク上で、任意の2台のコンピュータ間で一意のパスに接続されています。


  それは、データのリンクを追加しますので、ループネットワークように、しかし、最近ではネットワーク、2台のコンピュータ間誤動作の管理者を維持します。いずれか2つの間のループ上のコンピュータので、データ送信がこれらのコンピュータのバグで発生しそうという、もはや唯一の道ではありません。


  通常の送信を回復するために。暁明の必要性は、あなたが彼を助けることができ、ループ上のすべてのコンピュータを見つけるには?
入力形式
  最初の行は、整数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 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 }

 

おすすめ

転載: www.cnblogs.com/RE-TLE/p/11967557.html