並查集詳解 簡單 易懂

2021-09-28 20:22:45 字數 944 閱讀 1813

一、什麼是並查集

個人理解:

例如可以把乙個連通圖上的節點等看成乙個集合。

當1與2聯通時,我們把1和2放在同乙個集合,那麼怎麼把他們放在同乙個集合?

這就需要乙個陣列f[n]。

其中n代表它本身,f[n]代表n所在的集合。

首先我們需要初始化

void

csh(

int n)

}

他們每乙個都在自己本身的集合中

然後合併,但是在合併前我們需要先查詢這兩個點是否相連,這時我們就需要另乙個函式find

int

find

(int x)

通過find函式,分別查詢出這兩個點是否再同意集合,如果不同,就需要並在一起,這時就需要

void hb(int x,

int y)

通過合併函式,這兩個點就程式設計乙個集合了

其實並查集就這三個函式,只要你牢牢地記住,再難的並查集也不過是從這裡演變而來的。

接下來來到例題

洛谷村村通

#include

#include

using

namespace std;

int n,m,bcj[

1000001];

voidc(

int n)

intfind

(int x)

intmain()

for(

int i=

1;i<=n;i++

)find

(i);

int a=0;

for(

int i=

1;i<=n;i++

) cout<1<}return0;

}

並查集詳解

其實並查集顧名思義就是有 合併集合 和 查詢集合 兩種操作的關於資料結構的一種演算法。並查集演算法不支援分割乙個集合。用集合中的某個元素來代表這個集合,該元素稱為集合的代表元。乙個集合內的所有元素組織成以代表元為根的樹形結構。對於每乙個元素 parent x 指向x在樹形結構上的父親節點。如果x是根...

詳解並查集

並查集主要用來求解不相交集合的問題,主要針對於合併和查詢兩種演算法。並查集的實現主要包含了三個部分 並查集的初始化是對單個資料建立了乙個單獨的集合,每個集合應該包含以下兩個資料 由以上兩個資料,一般的並查集的結構一般有兩種表示形式 結構體構造如下 define max 50 struct node ...

並查集詳解

看大佬的形象解釋 並查集 按我現在對這個的理解 就是給你一堆數,然後給你兩個兩個數的關係,然後關係的傳遞性 連帶性 這些數就都有了關係 有關係的數組成乙個陣列,然後輸出這個一維陣列,裡面有幾個沒關係的陣列 應該怎麼做呢?第一種解釋是 每給兩個數就把乙個數當成祖宗,把另乙個數當成孩子,然後給了孩子和另...