樸素並查集

2021-10-23 08:16:37 字數 936 閱讀 9620

(1).樸素並查集

模板(並查集 —— 模板題 acwing 836. 合併集合)

int p[n]; //儲存每個點的祖宗節點

// 返回x的祖宗節點

int find(int x)

// 初始化,假定節點編號是1~n

for (int i = 1; i <= n; i ++ ) p[i] = i;

// 合併a和b所在的兩個集合:

p[find(a)] = find(b);

acwing836. 合併集合

一共有n個數,編號是1~n,最開始每個數各自在乙個集合中。

現在要進行m個操作,操作共有兩種:

「m a b」,將編號為a和b的兩個數所在的集合合併,如果兩個數已經在同乙個集合中,則忽略這個操作;

「q a b」,詢問編號為a和b的兩個數是否在同乙個集合中;

輸入格式

第一行輸入整數n和m。

接下來m行,每行包含乙個操作指令,指令為「m a b」或「q a b」中的一種。

輸出格式

對於每個詢問指令」q a b」,都要輸出乙個結果,如果a和b在同一集合內,則輸出「yes」,否則輸出「no」。

每個結果佔一行。

資料範圍

1≤n,m≤105

輸入樣例:

4 5m 1 2

m 3 4

q 1 2

q 1 3

q 3 4

輸出樣例:

yesno

yes

#include using namespace std;

const int n=100010;

int p[n];

int find(int x)

int main()

else

}return 0;

}

樸素並查集

並查集 又加找父親 hh 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。集就是讓每個元素構成乙個單元素的集合,並就是按一定順序將屬於同一組的元素所在的集合合併。並查集的基本操作 1.初始化,使每個節點的祖宗節點為自己。2....

並查集 並查集

本文參考了 挑戰程式設計競賽 和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 ...

並查集入門(普通並查集 帶刪除並查集 關係並查集)

什麼是並查集?通俗易懂的並查集詳解 普通並查集 基礎並查集 例題 題解 how many tables problem description lh boy無聊的時候很喜歡數螞蟻,而且,還給每乙隻小螞蟻編號,通過他長期的觀察和記錄,發現編號為i的螞蟻會和編號為j的螞蟻在一起。現在問題來了,他現在只有...