instruction: Írj union find algoritmust python nyelven.
output: Íme az Union-Find algoritmus alapvető implementációja Pythonban a súlyozott-gyors-union megközelítéssel:
  
  ```
  class UnionFind:
      def __init__(self, n):
          self.parent = [i for i in range(n)]
          self.size = [1] * n
  
      def find(self, i):
          root = i
          while root != self.parent[root]:
              root = self.parent[root]
  
          # Path compression
          while i != root:
              i, self.parent[i] = self.parent[i], root
          return root
  
      def connected(self, i, j):
          return self.find(i) == self.find(j)
  
      def union(self, i, j):
          root_i = self.find(i)
          root_j = self.find(j)
  
          if root_i == root_j:
              return
  
          # Weighted Quick Union
          if self.size[root_i] < self.size[root_j]:
              self.parent[root_i] = root_j
              self.size[root_j] += self.size[root_i]
          else:
              self.parent[root_j] = root_i
              self.size[root_i] += self.size[root_j]
  ```
  
  A `__init__` metódus inicializálja a `parent` és `size` listát, hogy tartalmazza az egyes csomópontok szülő csomópontját, illetve méretét. A `find` metódus egy indexet vesz és megtalálja a megfelelő elem gyökerét, miközben elvégzi az útvonal tömörítését. A `connected` metódus a gyökerük ellenőrzésével ellenőrzi, hogy a két csomópont kapcsolódik-e vagy sem. Az `union` módszer pedig úgy kapcsolja össze a két csomópontot, hogy az egyik csomópont gyökerét a súlyozott-gyors egyesítés módszerével egy másik csomópont gyökerének szülőjévé teszi.