互いに素なセット(互いに素な集合)

コンピュータサイエンスでは、互いに素設定のための木のデータ構造いくつかの互いに素な集合(互いに素な集合)合併やお問い合わせを扱いますあり、関節-検索アルゴリズムユニオン検索アルゴリズムが)、この操作のための2つのデータ構造を定義します。

そこには、図に示されています。

(1)自分の各ノードの祖先。

(2)各ノードの祖先の先頭を見つけます

 

(3)経路は、左、右の祖先として、連結された、組み合わされた圧縮します

次のコードを示しています:

 

#include <ビット/ STDC ++ H.>
 使用して 名前空間STD;
 INT F [ 1005 ];
 int型 POS [ 10005 ;]
 INT N-、M、SUM = 0 ;
 無効初期の(INT N-)         // 初期化機能を、各ノードは、意志先祖ノード集合
{
     INT I = 1 ; I <= N; I ++は
    {
        F [I] = I。
    }
    返します
}
INT ptr_get(INT X)     // ノードのクエリ祖先ノード
{
     IF(F [X] == X)
     のリターン; X
     それ以外の
    戻りptr_get(F [X])。
}
ボイド ptr_merge(int型 X、int型 Yの)   //が左祖先(入力各回)ように、2つのノード、ノードをマージします
{
     int型のT1、T2。
    T1 = ptr_get(X)。
    T2 = ptr_get(Y)。
    もし(T1!= T2)
    {
        F [T2] = T1。
    }
    返します
}
INT)(メイン              // メイン関数
{
      int型I、X、Y;
      int型 COUNT = 0 
     CIN >> N >> M。
     INIT(N)
     (i = 1 ; iが<= N; iは++ 
     {
         CIN >> X >> Y。
         ptr_merge(X、Y)
     }
     (i = 1 ; I <= M; iは++ 
      {
        もし(F [I] == I)
        カウント ++ ;
     }
     COUTは << <<数えてendlを。
}

トピックへのリンク:http://acm.jlnu.edu.cn/problem.php?id=1765

 

おすすめ

転載: www.cnblogs.com/julyzqy/p/11747129.html
おすすめ