演算法學習之並查集

2021-07-24 08:58:43 字數 714 閱讀 2972

並查集是一種樹型的結構,常常用來處理一些不相交的集合的合併和查詢問題。

查詢:確定元素所在的集合。

合併:將兩個集合合併成乙個集合。

查詢v所在集合的根節點

int find(int v)

合併:

void merge(int x,int y)

優化1:

int find(int x)

k = x;

while(k != r)

return r;

}

優化2:按rank啟發式合併

void merge(int x,int y)

}

example:

杭電1232:

#include using namespace std;

int father[1000];

//int rank[1000] = ;

int find(int x)

k = x;

while(k != r)

return r;

}void merge(int x,int y)

int main()

} cout<

演算法學習之 並查集

並查集用於解決連線類問題,判斷網路中節點間的連線狀態。與路徑類問題相比,並查集只回答了節點之間是否連通,而具體的連通路徑並不能確定,因此並查集在某些場景下非常高效。如前所述,此處的並查集實現只提供兩個介面 是否連線,元素合併。下面 使用乙個陣列來記錄每個元素所對應的類別,如果兩個元素的類別相同,則稱...

演算法學習 並查集

大家肯定有聽說過社交網路裡面的六人理論吧,說是可以通過六個人的聯絡認識世界上的任意乙個人。比如我想認識一下機械系的系花,我先找到機械系的朋友,然後通過朋友介紹認識。這樣可以發現我們的社交圈子其實是有部分重疊的。當然也有可能是我的圈子太小,根本沒有什麼朋友認識那個圈子裡面的人,也有很大可能是機械系花4...

演算法學習記錄 並查集

上大物學了會並查集,感覺挺簡單的,而且很好玩,繼dfs,bfs和floyd演算法外又學了一種求連通塊的演算法,綜合下來這幾種演算法各有優劣吧.並查集演算法詳解見此 模板如下 include using namespace std define maxn 100001 int father maxn ...