並查集的基本概念以及相關函式實現和應用

2021-10-02 18:03:56 字數 1235 閱讀 3659

並查集:「並」:合併;「查」:查詢;「集」:集合

也就是說並查集支援兩個操作:

(1)合併兩個集合

(2)查詢兩個元素是否屬於同乙個集合

並查集的實現其實就是通過乙個陣列:int father[n]

father[a]=b代表的是a的父親是b

#include

using

namespace std;

//並查集的初始化

for(

int i=

0;i)//查詢根結點

intfindfather

(int x)

return x;

}//合併

void

union

(int a,

int b)

//將a和b所在的集合合併

}//當元素較多,查詢根結點頻繁的時候,可以進行下面的路徑壓縮

//注:一般就是在查詢根結點的同時將經過的路徑結點都指向根結點

intfindfather2

(int x)

while

(a!=father[a]

)return x;

}//這樣每次查詢都會降低下一次查詢的時間複雜度,直到降到o(1)

簡單的題目應用:給定人數n,好朋友組數m,以及具體誰和誰是好朋友(m組)

求這些人可以分為幾組

輸入樣例:

7 51 2

2 33 1

1 45 6

輸出樣例:

3

#include

using

namespace std;

int father[

1010];

bool flag[

1010];

//用來標註每組的頭節點

intfindfather

(int x)

return x;

}void

init

(int n)

}void

unit

(int a,

int b)

}int

main()

for(

int i=

1;i<=n;i++

)int ans=0;

for(

int i=

1;i<=n;i++

) cout

並查集相關概念

前言 並查集這三個字,取自合併 查詢 集合。顧名思義,並查集支援兩種操作 合併和查詢 並查集的實現是乙個陣列,每個下標對應著它的父節點 int pre 100 並查集的初始化 初始化每個都是根節點,即自己的父節點就是自己,表明自己是根節點 for int i 0 i n i 並查集的查詢 並查集的查...

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

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

執行緒的基本概念和相關函式

標頭檔案 include 函式原型 pthread t pthread self void 功能 獲得執行緒自身的id。返回值 pthread t的型別為unsigned long int,所以在列印的時候要使用 lu方式標頭檔案 include 函式原型 intpthread create pth...