資料結構 並查集

2021-10-13 06:48:02 字數 761 閱讀 6589

int par[maxn]

;int

findp

(int x)

void

unite

(int x,

int y)

}bool

same

(int x,

int y)

請注意!!!:只有當findp(x)不等於findp(y)的時候才可以合併兩個集合,否則會無限遞迴找父親然後爆棧re。

並查集是一棵樹,那麼樹是可以啟發式合併的,那麼並查集也可以。

在並查集合並的時候維護並且更新一些資訊,就可以做到並查集啟發式合併,高效維護樹上資訊,俗稱帶權並查集。

一般更新資訊的時候直接在祖先節點打上乙個標記,遞迴找父親的時候再用此標記更新自己,就能和普通並查集一樣高效。

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

3e4+

10, mod =

1e9+7;

int par[maxn]

, pos[maxn]

;int

findp

(int x,

int son)

intmain()

else

}return0;

}

資料結構 並查集

並查集,顧名思義,合併 查詢 集合 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。對於概念等等的這裡不再贅述,直接講解應用。應用1 判斷圖中有多少聯通分量 或者圖是否聯通 聯通分量 1 hdu 1213 應用2 判斷圖是否...

資料結構 並查集

time limit 1000ms memory limit 65536k 某城市有n個人,現在給定關於n個人的m條資訊,m條資訊是兩個人在同乙個小區,根據所給資訊,判斷這個城市最多可能有多少個小區。n個人編號為1 n。多組輸入。每組第一行有兩個整數n,m 2 n 50000,0 m n 2 接下來...

資料結構 並查集

一 基本概念 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。集就是讓每個元素構成乙個單元素的集合,也就是按一定順序將屬於同一組的元素所在的集合合併。在一些有n個元素的集合應用問題中,通常是在開始時讓每個元素構成乙個單元素的...