並查集 並查集的基本操作總結

2021-09-26 08:52:01 字數 570 閱讀 3512

並查集的定義:「並」,union(合併);「查」,find(查詢);「集」,set(查詢);

並查集的實現:

int father[n];  //使用乙個陣列記錄

father[1]=1; //1的父節點是本身

father[2]=1; //2的父節點是1

並查集的初始化:

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

並查集的查詢:

int findfather(int x)

return x;

}

並查集的合併:

void union(int a,int b)

}

並查集的路徑壓縮:

int findfather(int a)

//到這裡,x存放的是根結點,下面吧路徑上的所有結點的father都改為根結點

while(a!=father[a])

return x; //返回根節點

}

並查集 並查集

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

並查集 並查集的刪除操作

描述 一天小 w 給學弟們上課,小 w 說 注意了,並查集只適合於加的操作,不太方便處理減的操作喲。j 老師聽了後,呵呵了一下。她課後找到小 w 說,其實並查集也可以做減的操作的。只看你如何靈活運用了。比如這個題 給你 n 個元素,最開始時分屬於 n 個集合,有如下三種操作 小 w 陷入了無盡的思考...

親戚 並查集 (內附並查集基本操作)

問題描述 何氏家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定 x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。輸入格式 第一行 三個整數n,m,q n 200...