フォレスト[PAT]クラス1118鳥(25ポイント)(互いに素なセット)

質問の意味:

(<= 10000)が、各数をKとKは正の整数整数正を含むN個の入力ラインに続いて、Kは同じツリー上にある鳥を表すNの整数の正の入力。出力には、いくつかの木々や鳥の合計数まで持つことがあります。次にQ整数陽性を入力し、その後Q入力ラインそれぞれ2つの正の整数、これらは同じツリー上にあるかどうかの出力を含みます。

AAAAAcceptedコード:

1  の#define HAVE_STRUCT_TIMESPEC
 2の#include <ビット/ STDC ++ H>
 3  使用して 名前空間STDを、
4  int型の FA [ 10007 ]。
5  INT VIS [ 10007 ];
6  INT find_(INT X){
 7      場合(X == FA [X])
 8          リターンX。
9      リターン FA [X] = find_(FA [X])。
10  }
 11  INT メイン(){
 12の      IOS :: sync_with_stdio()。
13     cin.tie(NULL)。
14      cout.tie(NULL)。
15      INT N。
16      CIN >> N。
17      のためにINT iは= 1 ; I <= 10000 ; ++ I)
 18          のFA [I] = I。
19      のためにINT iは= 1 ; I <= N ++ {I)
 20          のint 、K。
21          CIN >> K。
22          int型温度= 0 23          のためにINT J = 1 ; J <= K; ++ j)は{
 24             int型のx;
25              CIN >> X。
26              VIS [X] = 1 27              INT = F find_(X)
28              であれば(J == 1 29                  TEMP = F。
30              FA [F] = TEMP。
31          }
 32      }
 33      INT CNT = 0 34      INTの和= 0 35      のためにINT iは= 1 ; I <= 10000 ; ++ I)
 36         もし(FA [I] == I && VIS [i])と
 37              ++ CNT。
38          他に あれば(VIS [i])と
 39              ++ 合計。
40      coutの<< CNT << "  " << CNT +和<< " \ n個" ;
41      int型Q;
42      CIN >> Q。
43      一方(q-- ){
 44          int型A、B。
45          CIN >> B。
46          であれば(find_()== find_(B))
 47              COUT << ";
48          他の
49              coutの<< " ノー\ n個" ;
50      }
 51      リターン 0 52 }

 

おすすめ

転載: www.cnblogs.com/ldudxy/p/12373307.html