質問の意味:
(<= 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 }