並查集相關概念

2021-10-02 13:10:13 字數 783 閱讀 5445

前言

並查集這三個字,取自合併、查詢、集合。

顧名思義,並查集支援兩種操作:合併和查詢

並查集的實現是乙個陣列,每個下標對應著它的父節點

int pre[

100]

;

並查集的初始化

初始化每個都是根節點,即自己的父節點就是自己,表明自己是根節點

for

(int i =

0; i < n; i++

)

並查集的查詢

並查集的查詢就是不斷地向上找,直到找到自己的根節點

int

find

(int x)

並查集的合併

假如兩個人是陌生人,突然有一天,他們發現自己祖上是乙個,為了以後方便走親戚,他們得結合成乙個大家庭,也就是讓其中乙個人的根節點變成另外乙個人的根節點的根節點。

void

merge2

(int x,

int y)

}

這樣的話,這兩個陌生人再次見面的時候,假如不知道是不是一家人的時候,就可以使用查詢函式,查詢各自的根節點,通過判斷根節點是不是同乙個,就可以判斷是不是一家人了。

並查集求集合數量

pre陣列進行遍歷,只要從有效結點中找出自身的上級是自己,即pre[i] = i說明是根節點,根節點的數量就是集合的個數。

並查集相關問題

include 演算法題 1 已知有n個人構成的乙個集合,其中某些人與某些人直接是朋友關係。假定朋友關係具有傳遞性 朋友的朋友也是朋友 對稱性 相互是朋友 自反性 我是我自己的朋友 給定m組朋友關係,想要知道n個人中的任意兩個人是不是朋友關係。using namespace std typedef ...

並查集相關問題

並查集的相關知識 c 並查集實現優化 hard 給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 示例 輸入 100,4 200,1 3,2 輸出 4解釋 最長連續序列是 1,2,3,4 它的長度為 4。hash 具體做法 取出其左右相鄰數已有的連續區間長度 lef...

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...