並查集基本知識

2021-10-23 08:37:11 字數 1184 閱讀 3152

並查集是一種用來管理元素分組情況的資料結構:

查詢元素a和b是否屬於同乙個組

合併元素a和元素b所在的組

有兩種路徑壓縮:

1.對於每個節點,一旦向上走到了一次根節點,就將其直接連向根

2.不僅僅是查詢的節點,在查詢過程中所有經過的結點,都改為直接連到根上

基本結構:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

const

double n =

1e6+10;

const

double pi =

acos(-

1.0)

;const

int inf =

0x3f3f3f3f

;const

int mod =

1000000007

;#define ll long long

#define cl(a,b) memset(a,b,sizeof(a))

#define maxn 100010

int a[maxn]

;int par[maxn]

;int ran[maxn]

;void

init

(int n)

}int

find

(int x)

}void

unite

(int x ,

int y)

}int

main()

int res =0;

for(

int i =

1; i <= n ; i++

) cout << res-

1<< endl;

return0;

}

上述**的功能是:n表示n個節點,m表示m條邊,接下來m行是邊的兩個節點。問最少再加幾條邊可以變成任意兩點之間有路。

並查集知識

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

並查集 並查集的基本操作總結

並查集的定義 並 union 合併 查 find 查詢 集 set 查詢 並查集的實現 int father n 使用乙個陣列記錄 father 1 1 1的父節點是本身 father 2 1 2的父節點是1 並查集的初始化 for int i 1 i n i 並查集的查詢 int findfath...

並查集知識總結

1.非路徑壓縮 遞迴版 int64 findroot int64 x 非遞迴版 int64 findroot int64 x 查詢x的根節點 2.帶路徑壓縮 遞迴版 int64 findroot int64 x 找x的根節點 非遞迴版 int64 findroot int64 x return r ...