トピックリンク:http://icpc.njust.edu.cn/Problem/Hdu/1213/
検索とマージする支持素集合データ構造、森の動作、パス圧縮と、時間複雑さを見つけるために組み合わされ、ほぼ一定です。そして、最も基本的な役割をチェックすることは、いわゆる異なる点の間の「関係」、そして2が関連しているかどうかをクエリのセットを確立することです。特徴セットは、A-> B B-> Cのような検査ベクトル推移関係であり、A-> Cが存在し、特に画像トランスファーベクターとの間ではないのですか?多くの場合、アプリケーションとのセットを確認し、このプロパティに関連しています。会長と次のように、木に優しいもののコードセグメントに匹敵セットORZ hdu1213ボードの問題をチェックすること:
1の#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3符号なしのtypedef int型のUI。 4のtypedef 長い 長LL。 5符号なしのtypedef 長い 長いULL。 6 の#define PFのprintf 7 の#define MEM(A、B)のmemset(A、B、はsizeof()) 8 の#define prime1 1E9 + 7 9 の#define prime2 1E9 + 9 10 の#define PI 3.14159265 11 の#define LSON Lを、半ば、室温<< 1 12 の#define rson半ば+ 1、R、RT << 1 | 1 13 の#define scand(X)のscanf( "%のLLF"、&x)は 14 の#define F(I、B)のための(INT iは=; I <= B; I ++) 15 の#defineスキャン()のscanf( "%のD"、&) 16 の#define MP(a、b)はmake_pair(()、(B)) 17 の#define P対<整数、整数> 18 の#define DBG(引数)COUT <<#1引数<< ":" <<引数<<てendl; 19 の#define INF 0x3f3f3f3f 20インラインINT リード(){ 21件 のint ANS = 0、W = 1 。 22 CHAR CH = GETCHAR()。 23 中(!(CH == ' - ')W = - 1 ; CH = GETCHAR();} 24 ながら(isdigit(CH))ANS =(ANS << 3)+(ANS << 1)+ CH- ' 0 '、 CH = GETCHAR()。 25の リターン ANSは* wは、 26 } 27 のconst int型 MAXN = 1E6 + 10 。 28 整数N、M、T。 29 INT F [MAXN]。 30 セット < int型 > S; 31 ボイドのinit() 32 { 33 F(I、1、N-)F [I] = I; 34である s.clear(); 35 } 36 int型の検索(INT X) 37 { 38は IF(X == F [X])戻りX; 39 F [ X] =(F [X])を見つける; // パスコンプレッサ、または非常に不均一なツリー構成することができる 40 リターンX] [Fと、 41である } 42は、 ボイド連合(のINTの X、INT Y) 43である { 44が INT = FXの検索(X); 45 INT FY = 探す(Y)は、 46である IF(FX == FY)のリターン ; // 同じツリー持つ 47を 他の 48 { 49 F [FX] = FY; 50 // 接続ルート上に配置されているツリー、Bツリーを入れません達成するために組み合わされ、ツリーのルート、 51である } 52である } 53である 54である INT (メイン) 55 { 56である // freopenは( "INPUT.TXT"、 "R&LT"、標準入力) 57は、 // freopenは( "output.txtと"、「W 」、STDOUT); 58 STD :: :: IOSのsync_with_stdio(偽の); 59 T = 読む(); 60 int型A、B; 61は 、一方(T--) 62である { 63であり 、M = N =リード()リード(); 64 のinit(); 65 F(I、1、M)A =リード()、B = 連合(A、B)のRead(); 66 F(I、1。、N-)s.insert((I)の検索); //はどのように多くの独立したツリーを参照 67 PF(" %のD \ N-を" 、s.size()); 68 } 69 }