Další možnost, jak si pamatovat komponentu $C_v$ je pomocí orientovaného stromečku pokrývajícího komponentu. Z každého vrcholu $v$ povede orientovaná hrana (šipka) do jeho předchůdce $\pi(v)$ ve stromě. Z kořene $r$ povede smyčka zpátky do kořene, tj. $\pi(r)=r$. K reprezentaci stromečků všech komponent nám tedy stačí jen pole $\ARRAY{\pi}{\cdot}$. Pro každý vrchol $v$ si budeme navíc pamatovat délku nejdelší orientované cesty vedoucí do $v$ a označíme ji $rank(v)$. Proto se tomuto řešení anglicky říká union by rank.

Začneme s grafem, který se skládá z izolovaných vrcholů a proto na začátku pro každý vrchol $v$ nastavíme $rank(v)=0$ a $\pi(v)=v$. V operaci $\FIND(v)$ najdeme reprezentanta komponenty $C_v$ tak, že z $v$ půjdeme po orientovaných hranách až do kořene. Kořen $r_v$ je hledaný reprezentant komponenty $C_v$. Operace $\UNION(u, v)$ proběhne tak, že si nejprve najdeme reprezentanty $r_u$ a $r_v$ a pak natáhneme hranu z kořene stromu s menším rankem do kořene stromu s větším rankem. Tím vznikne nový strom reprezentující sjednocenou komponentu. Pokud budou mít oba stromy stejný rank, tak natažením hrany z $r_u$ do $r_v$ vznikne strom s o jedna větším rankem. Jinak se rank nezmění.

FIND($v$):
	while $v\not=\pi(v)$ do
		 $v := \pi(v)$
	return $v$
UNION($u$, $v$):
	 $r_u := FIND(u)$
	 $r_v := FIND(v)$
	 if $r_u=r_v$ then return
	 if $rank(r_u)>rank(r_v)$ then
	 	 $\pi(r_v):=r_u$
	 else
	 	 $\pi(r_u):=r_v$
	 	 if $rank(r_u)=rank(r_v)$ then
	 		 $rank(r_v):=rank(r_u)+1$

Časová složitost $\FIND(v)$ bude odpovídat výšce stromu, který procházíme, a to je $rank(r_v)$. Časová složitost $\UNION{}$ bude zhruba 2 krát tolik než časová složitost $\FIND{}$.

Všimněme si, že pro každé $v$ je $rank(v)\lt rank(\pi(v))$. Kořen s rankem $k$ vznikl tak, že jsme spojili dva stromy s rankem $k-1$. Proto má každý strom s kořenem ranku $k$ alespoň $2^k$ prvků. Graf má celkem $n$ vrcholů, takže nejvyšší možný rank je nejvýše $\log n$. To je zároveň horním odhadem časové složitosti operací $\UNION{}$ a $\FIND{}$.