再學一次並查集

2021-07-06 11:38:25 字數 624 閱讀 5198

再學一次並查集,感覺原來學過的太水了, = = 、 自從ccpc國賽被打回原形以後……

廢話不多說,重新系統地學習一下這個資料結構

並查集:本質是一顆樹,也就是一種資料結構,主要為了解決的問題就是是不是乙個集合的問題,尤其是一些具有傳遞性質的問題;

三個功能

初始化:把所有結點的father都指向它自身

合   並:把應該在乙個集合的點連線到一起

查   找:查詢某個點的父節點,看看是否是乙個集合

#include#includeusing namespace std;

int father[1005];

void init(int n)//初始化集合

}int find(int x)//查詢根結點,並且進行路徑壓縮

int k = x;

int j;

while(father[k]!=i)//查詢到根結點之後把每個結點的父節點都更新為根節點

return i;

}void merge(int x,int y)//合併兩個集合

int main()

int ans = 0;

for(int i = 1 ; i <= n; i++)

cout<

並查集 並查集

本文參考了 挑戰程式設計競賽 和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的螞蟻在一起。現在問題來了,他現在只有...

並查集,帶權並查集

題意 ignatius過生日,客人來到,他想知道他需要準備多少張桌子。然而一張桌子上面只能坐上相互熟悉的人,其中熟悉可定義成為a與b認識,b與c認識,我們就說a,b,c相互熟悉 例如a與b熟悉and b與c熟悉,d與e熟悉,此時至少需要兩張桌子。輸入 t表示樣例個數,n表示朋友個數,朋友從1到n編號...