並查集之pyhon實現

2021-10-05 03:01:04 字數 944 閱讀 5669

並查集(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是...