並查集是一種用來管理資料分組狀況的資料結構,可以進行合併操作,但無法進行分割。
並查集的結構
並查集也是用樹形結構來實現的,但不是二叉樹。每個資料,元素對應乙個節點,每個組對應一棵樹。
並查集的實現
並查集有幾個基本操作初始化、查詢樹的根、合併x,y所屬集合、判斷x,y是否屬於同一集合。
查詢是查詢樹的根節點,兩個數的根有共同的根節點,說明兩個數屬於同一組。
合併就是將乙個樹的根向另乙個樹的根連邊,兩棵樹就變成一棵,兩個組就合併成乙個組了。
為了使並查集更加高效,採用一種路徑壓縮的方法,每次查詢之後,若這個節點能找到根節點,那麼就將這個節點直接連線到根節點。
具體實現**:
int par[max_n];//父親結點
int rank[max_n];//樹的高度
//初始化n個元素
void init(int n){
for(int i=0;i
並查集 學習筆記
並查集是由一組互不相交的集合組成的乙個集合結構,並在此集合上定義了運算union和find。即並查集中的元素本身是集合,他們是某個集合的子集,並查集是由這些集合組成的集合結構。並查集上有兩個最基本的運算,find和union。函式find搜尋給定元素i所在的子集合,並返回該自己喝 union運算將兩...
學習筆記 並查集
這是乙個可以實現合併與查詢 元素間關係判定 用來維護多集合 功能多樣化 的超牛批的可以動態維護的樹形結構。這個演算法只要是實現集合元素關係的型別都可以用到,又是線性時間複雜度,而且最關鍵的是它是個高階資料結構,翻譯過來就是這個可以動態維護,所以我覺得這個用途比單純的演算法要好,實際應用比較大,而且這...
並查集學習筆記
也算是磕磕絆絆,斷斷續續的學歷一段時間並查集了吧,也是時候改寫乙個blog總結一下啦。先說一下普通並查集吧。普通並查集就是單純的把某些可以連起來的點用一條有向邊連起來,表示他們屬於 一類 例如hdu1213,這就是乙個並查集的裸題,直接把輸入的點合併,之後統計有幾個點的祖先是自己就行。ac incl...