def METHOD_NAME(self, obj):
    """Finds and returns the root of the set containing `obj`."""
    if obj not in self._parents:
        self._parents[obj] = obj
        self._weights[obj] = 1
        self._prev_next[obj] = [obj, obj]
        self._min_values[obj] = obj
        return obj
    path = [obj]
    root = self._parents[obj]
    while root != path[-1]:
        path.append(root)
        root = self._parents[root]
    # compress the path and return
    for ancestor in path:
        self._parents[ancestor] = root
    return root