hdu2473迷惑メールフィルタ互いに素セット

トピックリンク:http://icpc.njust.edu.cn/Problem/Hdu/1272/

件名は、2つの操作をサポートするために必要な、1が合併され、1ポイントとすべての他のポイントとの間の関係を削除することですが、他の点は、私たちの主な思考を含む既存の関係、関係の問題を維持することが、明らかであることをチェックすることで、セット。削除操作の関係は、私たちはライン上の未使用のノードからノードにこのポイントを作ることができますが、このノードがツリーのルートである場合、それは、この木はまだ削除されるポイントの他のノードが発生しますノード。我々は仮想ノードを作成する必要があるので、時間の0-n-1のノード番号がノードに直接、自分自身を指していないので、削除ノードを開始するには、新しいノードにポイントを削除することができ、マージおよび削除彼らは実質的に一定の複雑さです。もう一つ注意すべきは、すべてのノードでチェックし、フォーカス内のノードは、父親を持っているので、ポイントの初期化時間そのものを指すようにポイントを削除した後、ほとんどのm回であるということです。設定されていない場合は、(X)を見つける父のxのを取得することはありません。

コードは以下の通りであります:

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  CONST  INT MAXN = 130万21  整数N、M、T。
22  int型 AA = 0 23  int型A、B;
 int型 > S;
25  int型のインデックス。
26  INT F [MAXN]。
27  ボイドのinit()
 28  {
 29      F(I、0、N- 1)F [I] = I + N。
30      F(I、nは、2 * N + M)F [I] = I。// 至多删除MAXN个结点、
31      インデックス= 2 * N。
32       s.clear()。
33  }
 34  int型の   検索(int型X)
 35  {
 36      であれば(X == F [X])リターンX。
37     リターン F [X] = 検索(F [X])。
38  }
 39  空隙連合(int型のx、int型のY)
 40  {
 41      INT FX = (X)を見つけます。
42      INT FY = (y)を見つけます。
43      であれば(FX ==年度)のリターン;
44       F [FX] = FY。
45  }
 46  のint main()の
 47  {
 48      // freopenは( "INPUT.TXT"、 "R"、標準入力)。
49は     // freopenは( "output.txtと"、 "W"、STDOUT); 
50件      のstd ::イオス:: sync_with_stdio(偽の);
51      チャー TMP [ 5 ]。
52      一方(scanf関数(" %D%D "、&​​N、&M)== 2 &&(N + M))
 53      {
 54          AA ++ 55          のinit();
56          F(I、1 、m)の 
 57          {
 58              のscanf(" %sの" 、TMP)。
59              であれば(TMP [ 0 ] == ' M ' 60              {
 61                 スキャン();
62                  スキャン(B)。
63                  連合(A、B)。 
64              }
 65              であれば(TMP [ 0 ] == ' S ' 66              {
 67                  スキャン()。
68                  F [A] =インデックス++ ;
69              }
 70          }
 71          F(I、0、N- 1 )s.insert(検索(I))。
72          PF(" ケース#1%のD:%D \ n " 、AA、s.size())。
73      }
74      リターン 0 ;
75   }

 

おすすめ

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