837番号(互いに素なセット)通信ブロックの中点

無料のn個の点を考えると何のエッジを描画しない初期を表示する(1〜Nの番号が付け)。

m個の操作になりました3種類の合計を操作します:

  1. 「C AB」でも片側は、bは点とBの間の等しくてもよいです。
  2. 「Q1 AB」、呼び掛け点、bはaとbが同じであってもよい、ブロックと通信しています。
  3. 「Q2のA」、質問の数は、通信の途中に位置するブロックを指し示します。

入力形式

入力整数n及びmの最初の行。

続いて行をM、各操作指示、命令 "C AB" を含む行、 "Q1 AB" または "Q2のA" のいずれか。

出力フォーマット

各問い合わせ命令「Q1 AB」は、場合とBは、同じブロック内で「はい」の出力を伝え、そしてそうでなければ「いいえ」を出力しています。

各問い合わせ命令「Q2のA」、ブロック通信中点の整数点Aの出力のために

各結果行。

データ範囲

1 N M 10 5 1≤n、m≤105

サンプル入力:

5 5
C 1 2
Q1 1 2
Q2 1
C 2 5
Q2 5

出力例:

Yes
2
3

コード:
インポートjava.util.Scanner;

パブリック クラスメイン{
         静的 int型N-、M;
         静的 最終 int型 N = 100005 ;
         静的 INT P [] = 新しい新しい INT [N];
         静的 int型のサイズ[] = 新しい新しい INTを [N]; //は、要素のコレクションを格納します番号、有効な唯一のルートノード
        静的 int型の検索(INT X){
                 IF(P [X] = X!)P [X] = 検索(P [X]);
                 戻りP [X]。
        }
        パブリック 静的 ボイドメイン(文字列[]引数){
                スキャナのスキャン = 新しいスキャナ(System.in);
                N = scan.nextInt()。
                M = scan.nextInt()。
                以下のためにINT I 1 =; I <= N; I ++ ){
                        P [I] = I。
                        サイズ[I] = 1 
                }
                一方、(M - > 0 ){
                        文字列s = scan.next()。
                        もし(s.equals( "C" )){
                                 int型 A = scan.nextInt()。
                                INT B = scan.nextInt()。
                                もし(()==見つける(b)に見つける。)続けます
                                サイズ[検索(B)〕 + =サイズ[検索(A)]; // 最初の再結合し、そうでなければ繰り返し加え 
                                P [探す(A)] =は、(B)を探します。
                        }
                        そう であれば(s.equals( "Q1" )){
                                 int型 A = scan.nextInt()。
                                INT B = scan.nextInt()。
                                もしするSystem.out.println( "はい"(()==見つける(B)を見つけます。));
                                のSystem.out.println( "いいえ" );
                        }
                        {
                                 INT A = scan.nextInt()。
                                System.out.println(サイズ[見つける(A)])。
                        }
                }
        }
}

 

おすすめ

転載: www.cnblogs.com/qdu-lkc/p/12234593.html