並查集(union-find sets)是一種非常精巧而實用的資料結構,它主要用於處理一些不相交集合的合併問題。並查集的基本操作有以下3個:
#!/usr/bin/python
# -*- coding: utf-8 -*-
classuf(
):def__init__
(self,n)
: self.count=n#連通分量個數
self.parent=
[i for i in
range
(n)]
#儲存一棵樹
self.size =[1
for i in
range
(n)]
#記錄樹的數量
#查詢def
find
(self,x)
:while self.parent[x]
!=x:
x=self.parent[x]
return self.parent[x]
#合併def
union
(self,x,y)
: xp=self.find(x)
yp=self.find(y)
if xp==yp:
return
if self.size[xp]
>self.size[yp]
: self.parent[yp]
=xp self.size[xp]
+=self.size[yp]
else
: self.parent[xp]
= yp
self.size[yp]
+= self.size[xp]
self.count-=
1
並查集 並查集
本文參考了 挑戰程式設計競賽 和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 ...
java實現並查集
並查集是根據這篇博文學習的,寫得很不錯 下面是實現 public class unionfindset count n 合併p,q所在集合 param p param q public void union int p,int q if size rootp size rootq else coun...
C 實現並查集
將n個不同的元素分成一組不相交的集合。開始時,每個元素就是乙個集合,然後按規律將兩個集合進行合併。假如已知有n個人和m對好友關係 存於陣列r 如果兩個人是直接的或間接的好友關係 好友的好友的好友.則認為他們屬於同一好友圈,請求出這n個人中有幾個好友圈。例如 n 5,m 3,r 表示有5個人,1和2是...