並查集是一種樹型的結構,常常用來處理一些不相交的集合的合併和查詢問題。
查詢:確定元素所在的集合。
合併:將兩個集合合併成乙個集合。
查詢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 ...