Disjoint Sets Keep keys in disjoint sets Find set containing key

!#"$%#'&)(*#",+-./+.
0#"1$2./+43(*",+56#"#"%789/
:!"%;(*"2+=<!(>?+?
@ %A#;3B5C+?;(*"EDF$/+.GHI#"1J3(*""13+.$3(HIK(*"",+?4(LM56"2N"1$;G3+.$O79GP56%Q
RTSVUXW WYSYZ[ \KW^]%_KW^` S ^a Wb_
cXd ]eWYSeZ[ WfgXW
h1ij d i aWb_ka Z d i _lS mj ijmi g \KW]%_ j ZWna d^c WfgXW
@
oYprq*Ym1
msXt
#J58$e5+5u)+.GN3+?N1G>vxw ybzM{|6}~}~|zm€Ye(G‚5u3(*A#A;3/+.;(*"
(L$#t&)(*#",+-$b"n5mHI;3‚?+?ƒ
…„ 5m3.Q†?+rQn56‡5
A;ŽN"%;("$<‘’+?Q“56"1(m+?Q1G”./+6ƒ
A;Huˆ",+C9<-Q;3?Q‰"1/Š‹G…3.Qe56"79ŒN"b
• p‡Yq*sXt
r
– w X(*#",+.G”+.(856"O(*—^&)3+-3(*",+56#"#"%7u.(Hu˜9/
{
“5P v^/+ –
G5+. "1< ?+z‚<-’+.Q(*"1‚HuH —KG –
1Gˆ.ˆ",+5C+?’Š‹J(LMz # –
4#'&)(#"9+‘?+‘w 4#'&)(*#",+-./+
z :!"%;(" –  z w ?+43("9+ˆ56#"%#"7 –
z w ./+43(*",+56#"#"%7 z Jw z z G z w G z (9G‡GŽˆ z (G456",(+?QG (*—^&)3/+4#"z
4#'&)(#"9+‘?+‘w 4#'&)(*#",+-./
+ z z
z
0#"1$V v^/+ – z w ?+43("9+ˆ56#"%#"7 –
G+?NG"G z rp p^sX*'E
0#"1$#"7I+.Q 3(*""13+.$3(HIK(*"",+?(L 5 79G.56Qƒ
(*""13+.$V (HIK(*"1ˆ",+? ‚G.56Q L (G5m3.QŠ#"Š‹G +?;3 ‚G.56Q “5m9P vb+ ~Š L (G5m3.Q #" $79 ˜GP56%Q NE Š w L 0E#"$b v^+ N w 0#"1$b v^/+ ~Š +?Q1ˆ"“:!";(*" N Š v5mHu/ (9HIX(*"1"9+ N Š L…0#"$b vb+ N w 0E#"$b v^+ ~Š !
+?Q1ˆ"OG/+.NG)"G)N1
ˆA#. GŽ/+?N1G)"“015mA#?
„ – m5 HIA;
!
k!6 oYprq*YmY
msX*'E
!: ?‚A##"$A##)++.(>GGŽˆ.ˆ",+4?+4(L(*—^&)3+?Cƒ
„…5m3.Q (—^&)3+83(*",+5m#"%‰5“X(*#",+.G +.(“+?Q2GˆE +.Q 9/b…56"1$ 5“X(*#",+.G +.(
"1 – +Cƒ
“5P v^/+ – G – w –
" – + – w "!$#
0#"1$V v^/+ –
G+?NG"G – :!"%;(" – V &% ?(' (L –
L (G5m3.Q(*—^&)3+4#"G – #"%.G +(—^&)3+4#",+.( G (—^&)3+ w G ~ GHu( Š‹ –
…
s *)Mt
!Q1<!(G))+356? .3"n5mG);( #D
+
“5m9P vb+ { ƒ;ƒ;ƒ
“5m9P vb+ y%y { €1ny ! €1ny + €1l}m}6} Xy V€€
:!"%;(*" {  ! yy { ! €YYy + €Yl}6}m}~ey ‹€%€
:!"%;(*" !  + yy { ! + €Yl}6}m}~ey €%€
ƒ;ƒ;ƒ
:!"%;(*" n{ y%y { ! + }6}m}
€
"xw x5m/ v^/+4(*KGP5+?;(*"
H w “5m/ vb+C1:!"%;(*"EY56"1$“0E#"$b v^+(*KG.5C+?;(*"
H w "  (*XG.5+.;(*"%
n{ {
H w % w % !
"xw % 56"1$ w % !Q1GL (9G 'H w % ! 56"1$O+?Q1>5mHu(9G +?(' $x3(*+# % +?;(*"Eƒ
5m" < $%( —K/++PG
XG(*XG.5B
Y m rt
rq6
…1s ”‚+PG.5m3P (LV+?Q1M"VN1H —KGT(L^(*—^&)3/+?T#" 5‡./+ A;ˆ"7+?Q (L^A##+ ƒ @ %Kˆ"1$
ŽQ1(G +PG‡A##)+!+P( A;("%79G A##)+6ƒ
@ ? ‹N"3 (LEH (*KG.5C+?;(*"V" (Lk<-Q;3.Q 5mG x5m/ v^/+(*KG.5C+?;(*",+5m
H " A#7I" +?;Hu9ƒ
&
"!
#
%$
)
('
,+
*
-.-0/21
3
4
>q* vb#"3 <! (*"A’ 3?Qn56"79 GŽˆ – L (G-(—^&)3+? #"“+.Q ŽQ1(G +.G4A##+˜L (G
5m3.Qx:!"%;("156"1$A##+?!)+5G +-5C+ A;"%7*+?Qew V+?Q1"2B53?Q :!"%;(*"x5+A;B5m)+4$%(N%—A;ˆ
+?Q1IŽ(' u(L – JA##)+Cƒ !QVN%Ck< I356" $(“5C+ Hu()+ x:!"%;(*"J+?Qn5+ G ‹N;G
G – 3.Qn56"79ˆC156"1$‰+?Q1G 5mG "O(*—^&)3/+?Cƒ
@ 5 GŽNA’+C‹+?Q1G 5mGJ5 +P(m+56Al(L
3.Qn56"%7,ˆCƒ
!tL,<!…5m$$+.Q 3(*+?lL (Ge+?Q H “5m9P vb+56"1$ 0#"1$b v^/+(*XG.5+.;(*"%C
< ‚79+
'
&
slq162-q*1Y
…1s ! ˆ1G?"9+-$%#'&)(#"9+4./+.‘56-5 L (G)+(L +.GŽƒ
('
Object:
key
Example: Sc = {c, b, a}
c
parent
c
b
b
a
a
!G?",+5+?’ŠVˆ5G˜G(b(m+.
– w n5mG"9+ – • p‡Yq*sXt
r
“5P v^/+ –
e5Gˆ",+ – w –
0#"1$Yv^+ –
"
0 (*A#A;( < e5mGŽˆ",+4X(#"9+PG)L G(H – +.( G(b(+
G+?NG"G(b(m+
:!"%;(" – V e5Gˆ",+ – w 0#"1$Yv^/+ ~
EG L (GŽH‰56"13‚/5mHu 5m!A##"$OA##)+?Cb—%N+-3B5m"$( —K/+Ž+.GBƒ
rt
) osl
!t" :!"%;(*"E^Qn5ˆŠ‹‚e5mGŽˆ",+-(LŽQn56A#A;( <!G”+PG‚X(*#",+!+.( (m+.QG +.Gƒ
x56#",+56#"G.56"1 – 56 56"†N%XGr—K(*N%"1$‰(*"u+.Q-$%^+.Q (*Ln+?Q1+.G-G(b(+.$ 5+
–ƒ
!
“5P v^/+ –
e5Gˆ",+ – w –
G.56"1 – w :!"%;(" – V G – w 0E#"$evb+ –
G9 w 0E#"$evb+~ L G.56"1 G – G.56"1 G9 +?Q1ˆ"e5mGŽˆ",+ GŽˆ, w G –
ˆA#.‚n5mG",+ G – w G,
LGP56" 'Gˆ – w G.5m" GŽˆ, +?Q1ˆ"2GP56" 'Gˆ, w GP56" 'Gˆ,
5m" < $%(IŠ‹"2—X++.G
JsX prq*Ymt
Q#A;-A;(b(V#"%7 L (9G G – —9>+.G.5Š‹G)Ž#"7 e5mGŽˆ",+ŒX(*#",+.G)C9?+ B5m3.Q‰(*" +.(‚+?Q
GŽNA’+?#"78G – ƒ
A#;3P(*"OHu(*N?‘+P(I5m$^Š‹56"3+P( "1 – +L GP5mHu9ƒ
(" +.GŽ”Q#7Q,+C*n5+?Q 3(HuG 
m ”vV#"13!GP56"J# 56"
Ž;("2"1$ "1(m+43.Qe56"79JG.56"1Vƒ
'
>m … ^ …
0#"1$Yv^+ –
L – w n5mG",+ –
‡<!(6 56Ž+?Q1(b$
+?Q1ˆ"e5mGŽˆ",+ – w 0#"$ev^/+ e5mGŽˆ",+ – G+?NG"2n5mG"9+ – %$
…s *)Mt
'
% H w (*XG.5+?;("%
" H w “5mv^/+4(*KG.5C+?;(*"#"H
% A;(*7 { L"L ! "
% A#7 LT$L # "
"“w x5mvb+4(*XG.5+?;("%
!Q1G 5mGŽ% "b :!"%;("%
L w 80#"1$evb+‘(*KG.5C+?;(*"
*
+
&
…s *)Mt
H H  " < (G)+43B56.˜G)N"%"#"7 +?;Hu
'H  " #4#"9ŠVG).‚(L @ 3PGŽH‰56"" L N"13/+?;(" @  & H  " w HI#"ky* ! @  A#7I"k€
@ & w L (G& ! @  w @   L (G‡ ! +
*
+
@ C& w @  9 @ C&= j=1 j−2
i=1
2
i=2
2
i=3
2
1
2
2
2
2
2
2
2
2
2
j=3
2
2
2
2 16
...
2
2
2
2
!
j=4
3
2
L (9G C&
4
2
2
2 2
...
2
2
2
2
2
2 16
...
m @  & #)+.G;3/+?A’ #"13GŽB56?#"%756"$ ! ?#"3 H ! "Eƒ
!Q1GL (9G @ Y ! @ e w @ !" @ !# w GP56#?$ +.( +?Q1˜K( < G$ % +?;Hu '&)(
*&+(-w +?Q1˜"VNH —XG!(L 5+.(HI #" +?Q (*—?G Š,5m—%A; N"’Š‹G?
| w >L (G”G.53/+?;356AkN?!Ž#"13 A#7I" # + %;356A#A’2A;Ž +.Qe56" '&)(
'
2
&
!QVN H w H ƒ
5mHu(G +?('$23(*+!KG (*KGP5+?;(*"
prp^sX*'E
r