[3367]羅区テンプレート互いに素なセット

タイトル説明

述べたように、互いに素セットは、今そこにある、あなたがマージし、クエリ操作を完了する必要があります。

入出力フォーマット

入力フォーマット:

 

最初の行は、2つの整数N、Mを含み、NはMの要素と操作の合計を表します。

次のM行、三つの整数紫、西、李を含む各行

場合紫= 1、Xi及び李の合成組

紫= 2の場合、Xi及びYiが同じセット内にある出力は、Y出力場合であり、それ以外の場合は、Nを出力します

 

出力フォーマット:

 

上記のように、紫= 2のそれぞれのための動作は、出力線を有し、各列は、大文字が含まれているか、またはYはNであります

 

サンプル入力と出力

入力サンプル#1:  コピー
4 7 
2 1 2 
1 1 2 
2 1 2 
1 3 4 
2 1 4 
1 2 3 
2 1 4
出力サンプル#1:  コピー
N 
Y 
N 
Y

説明

時間の制約:1000ミリ秒、128M

データスケール:

データの30%、N <= 10、M <= 20。

データの70%を、N <= 100、M <= 1000。

データの100%に、N <= 10000、M <= 200000。

 

解決策:説明エヘン咳、とああような質問親戚を必要としません。

// <ビット/ STDC ++ H>の#include 
の#include <iostreamの> 
する#include <アルゴリズム> 
の#include <キュー> 
の#include <cmath> 
の#include <CStringの> 
する#include <cstdlib> 
の#include <cstdioを>
 使用して 名前空間STD。
int型 N、M、P、A、B、S1、S2、FA [ 10005 ]、ANS。
int型の検索(INT X){
    場合(FA [X] == x)をリターンX。
   戻り FAを[X] = (FA [X])を見つけます。
} 
int型のmain(){ 
    freopenは(" 3367.in "R "STDIN); 
    freopenは(" 3367.out " " W "STDOUT); 
    scanf関数(" %D%dの、&​​N、&M);
     のためint型 i = 1 ; iが<= N; iが++) FAは[I] = I;
     一方(M-- ){ 
        scanf関数(" %D%D%D "、&​​P、&、&B);
         場合(Pの== 1 ){ 
            S1、S2 =; =(A)を見つけます(B)を見つける;
             もし(!S1 = S2)FA [S2] = S1;
        } 
        {
              場合(見つける(A)== 検索(B))
                のprintf(" Yの\ n " );
             のprintf(" N \ nを" ); 
        } 
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/wuhu-JJJ/p/11129355.html