並查集的學習

2021-08-27 21:17:21 字數 884 閱讀 4634

並查集,是關於樹的結構的知識運用,可看成是多個樹的關係建立。即森林!每一棵樹代表乙個集合,每棵樹的根即為該集合的代表。總分為兩大操作,查詢與合併。

用陣列來建立乙個並查集,陣列下標代表元素,下標對應的值代表父節點,全部初始化為-1,根節點為乙個集合的元素個數,陣列的長度為並查集的初始連通分量的個數。並查集要求各集合是不相交的,因此要求x沒有在其他集合中出現過。演算法如下:

uf(int size)

}

找到x所在樹的根節點,即x所在集合的代表。

**如下:

int find(int x)

else

}

將包含x,y的動態集合合併為乙個新的集合。合併兩個集合的關鍵是找到兩個集合的根節點,如果兩個根節點相同則不用合併;如果不同,則需要合併。 將兩棵樹合併為一棵樹的操作~!

演算法:

void uion(int root1, int root2)

else if(this->array[root1] < this->array[root2])

else

}

#include #include using namespace std;

class uf

}int find(int x)

else

}void uion(int root1, int root2)

else if(this->array[root1] < this->array[root2])

else

}bool check(int root1,int root2)

int getcount()

};

並查集 學習

yx th000 cherish yimi 昨天和今天學習了並查集和 trie 樹,並練習了三道入門題目,理解更為深刻,覺得有必要總結一下,這其中的內容定義之類的是取自網路,操作的說明解釋及程式的注釋部分為個人理解。並查集學習 l 並查集 union find sets 一種簡單的用途廣泛的集合.並...

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...

並查集的學習

概念 在某些應用中,我們要檢查兩個元素是否屬於同乙個集合,或者將兩個不同的集合合併為乙個集合。這是不相交集合經常處理的兩種操作 查詢和合併,我們成為並查集。基本思想 1.標示乙個集合 選擇集合中某個固定的元素作為集合的代表,讓它作為整個集合唯一的標識。一般來說,選取的代表是任意的。也就是說,到底選擇...