資料結構 並查集

2021-08-18 14:47:39 字數 1110 閱讀 1430

一、基本概念

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

1、概念

在一些應用問題中,需要將n個不同的元素劃分成一組不相交的集合。開始時,每個元素自成乙個單元素集合,然後按一定的規律將歸於同一組元素的集合合併。在此過程中要反覆用到查詢某乙個元素歸屬於那個集合的運算。適合於描述這類問題的抽象資料型別稱為並查集(union-find set)。

2、場景

總結:在父指標陣列表中,在同一棵樹上所有節點所代表的集合元素在同乙個子集合中。對於任意給定的集合元素x,只要借助這個對映就能找到存放x的樹節點,沿此存放x結點的父指標向上一直走到樹的根節點,就可以得到x所在集合的名字。

二、並查集的實現

#define _crt_secure_no_warnings 1

#pragma once

#include

using

namespace

std;

#include

class ufs

*/ }

int find(int root)

return root;

}void unionset(int x1, int x2)

size_t count()//檢視集合中有幾個子集合

return count;

}private:

vector

_vt;

};void test()

結果如下所示:

對於並查集的概念,大概就這麼多了,在後面還會給出一些關於並查集的應用,希望大家多多關注。

只有不停的奔跑,才能不停留在原地!!!

資料結構 並查集

並查集,顧名思義,合併 查詢 集合 並查集是一種樹型的資料結構,用於處理一些不相交集合 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 接下來...

資料結構 並查集

並查集 通過陣列來實現的一種將有關係的節點都聯絡起來的一種搜尋結構。實現 include include using namespace std class unionfindset void union int root1,int root2 結合兩個節點 size t findroot int ...