(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的螞蟻在一起。現在問題來了,他現在只有...