hdu1213互いに素セットボード

トピックリンク: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   }

 

おすすめ

転載: www.cnblogs.com/randy-lo/p/12559969.html