(** Union find represented using pointers *)

type cell = content ref
and content = Node of cell | Root

let rec repr x =
   match !x with
   | Root -> x
   | Node y -> repr y

let create () = 
   ref Root

let same x y =
  repr x == repr y

let union x y =
   let rx = repr x in
   let ry = repr y in
   if rx != ry 
      then rx := Node ry