並查集:「並」:合併;「查」:查詢;「集」:集合
也就是說並查集支援兩個操作:
(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...