資料結構 並查集

2021-10-08 11:01:09 字數 1193 閱讀 6184

查詢兩個元素是否在乙個集合中

合併兩個集合(單獨的乙個元素也算乙個集合)

查詢連通塊中點的數量

用乙個p陣列維護每個節點的父節點,例如x節點的父節點為p[x]

利用find函式進行集合查詢和路徑壓縮,例如find(x)返回x的集合

每個集合的頂點元素值用來表示該集合

合併兩個集合可以讓其中乙個集合頂點x的p[x]等於另乙個集合的頂點元素值。

因為所有集合的頂點元素值都不同,所以可以維護功能陣列來儲存所有集合的資訊,例如乙個集合中節點的數量(連通塊中點的數量)

#include

using

namespace std;

const

int n =

1e5+5;

int p[n]

, n, m;

//查詢乙個節點x的集合頂點值並壓縮路徑

intfind

(int x)

intmain()

return0;

}

#include

using

namespace std;

const

int n =

1e5+5;

int p[n]

, cnt[n]

;int n, m;

intfind

(int x)

intmain()

while

(m--

)else

if(op ==

"q1"

)else

}return0;

}

#include

using

namespace std;

const

int n =

5e4+5;

int p[n]

, dist[n]

, n, k;

intfind

(int x)

return x;

}int

main()

else

if(op ==1)

}else}}

cout << res;

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個元素的集合應用問題中,通常是在開始時讓每個元素構成乙個單元素的...