UVA11987取り消し線互いに素セット

1〜nは、数nは、次にセットとして独自の初期数の各操作m回。
3つの動作があります
。1つのPQ:Pは、ここで、Qのセットに組み込まれるように設定されています

2 PQ:P-Pのセットのうち、Qのセットに

3 P:要素数と出力の集合の要素とp

サンプル入力
5 7
1 1 2
2 3 4
1 3 5
3 4
2 4 1
3 4
3 3

出力例
3 12
3 7
2 8

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <文字列> 
の#include <CStringの> 
の#include <cmath> 
の#include <アルゴリズム> 
書式#include <キュー> 
の#include <マップ> 
書式#include <設定> 
書式#include <スタック> 
#include <ベクトル> 
の#define Twhile()T INT; scanf関数( "%のD"、&T);一方(T--)
の#define CLC(B)のmemset(A、B、はsizeof())
の#define <;(I ++ B I iは=)用のフォーラム(I、B)
(; B; i-- I iは=)用の#define FORS(I、B)> 
の#define fora2(iはI <= B; I ++)(iは=ため、B)
= B; i--)I;(iは=ための#define fors2(I、B)> 
)-1.0(ACOSの#define PI 
#define EPS 1E-6 
の#define INF 0x3f3f3f3f 
 
のtypedef長い長LL。
長い長いLDのtypedef。
名前空間stdを使用。
MAXN = 100000 + INT CONST 11; 
地図<整数、整数>ミリアンペア; 
INT COU [MAXN]、SUM [MAXN]; 
INT FA [MAXN]; 
int型N-、M、
ボイドのinit()
{ 
    ma.clear(); 
    INT I; 
    fora2(I ,. 1、N-)
    { 
        FA [I] = I; // i番目のI点父
        COU [I] = 1; //設定i番目の数1 
        SUM [I] = I; // iは、i番目の和に設定
        i番目に属する点の// i番目のセット;ミリアンペア[I] = I 
    } 
} 
int型Aのfind_xx(INT X)
{ 
    IF(FA == X [X])リターンXを; 
    ;リターンFA [X]はのfind_xx(FA [X])= 
} 
int型のmain()
{ 
    int型kcase = 0; 
    ながら(〜scanfの( "%D%D"、およびN-、&M))
    { 
        INITを(); 
        しばらく( M--)
        {
                首[FY] +首[FX]
            OPのINT; 
            scanfの( "%のD"、&OP)、
            IF(OP == 3)//要素の数と出力セットの要素とp 
            { 
                int型X; 
                scanfの( "%のD"、X&); 
                INT FX = Aのfind_xx(ミリアンペア[X]); 
                のprintf( "%D%D \ N-"、COU [FX]、SUM [FX]); 
                続行; 
            } 
            int型のX、Y、
            scanfの( "%Dの%のD"、およびX 、&​​Y); 
            INT = FX Aのfind_xx(ミリアンペア[X])のfind_xx FY =(ミリアンペア[Y]); 
            IF(FX == FY)続行; 
            。。IF(OP == 1)1つのPQ //:ここで、p Qセットの組み合わせセット
            { 
                FY合成//分岐FXおよび通信
                FA [FX] = FY;
                SUM [FY] = SUM + [FX];
                //クリアFX 
                COU [FX] = 0; 
                SUM [FX] = 0; 
                続行; 
            } 
            Xミリアンペア[x]のうちから//セット
            // 2 PQ:セットからPアウトP、にQのセット
            SUM [FX] - = X; 
            COU [FX] - ; 
            //セットXミリアンペア[Y]に
            [X] =ミリアンペア[Y]ミリアンペア; 
            COU [FY] ++; 
            SUM [FY ] = X +; 
            
            
 
        } 
    } 
    0を返します; 
}

  

おすすめ

転載: www.cnblogs.com/cutemush/p/11810126.html