TCL 直播稱美的空調“連個風扇都不如”被判詆譭和虛假宣傳,賠 30 萬元
阿新 • • 發佈:2022-05-08
並查集是一種多叉樹,用於處理一些不相交集合的合併與查詢問題。
初始化
每個結點單獨作為一個集合。
查詢
求元素所在集合的代表元素,即根結點。
合併
將兩個元素所在的集合合併為一個集合。
合併之前,應先判斷兩個元素是否屬於同一集合,用上面的查詢來實現。
實現流程
動態集合中每一個元素由一個物件來表示,設x表示一個物件,並查集的實現需要如下操作:
MAKE(X)
建立一個新的集合,由於各集合是分離的,要求x沒有在其他集合中出現過。
UNION(X,Y)
將包含x和y的動態集合合併為一個新的集合,假定在此操作前這兩個集合是分離的。
所得集合的代表是Sx∪Sy的某個成員。
FIND(X)
返回包含x的集合的代表。
路徑壓縮
將元素的父親指標全部指向根節點。
總結
初始化,
for(i=1;i<=n;i++)father[i]=i;
每個元素屬於單獨的一個集合,以自己作為根結點。
尋找根結點編號並壓縮路徑,
int find(int x){
if(father[x]!=x)
father[x]=find(father[x]);
return father[x];
}
合併兩個集合,
void unionn(int x,int y){
x=find(x);
y=find(y);
father[y]=x;
}
判斷元素是否屬於同一集合,
bool judge(int x,int y){ x=find(x); y=find(y); if(x==y) return true; else return false; }
並非原創,僅是整理,請見諒