Advertisement
jbn6972

Untitled

Oct 6th, 2021
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.41 KB | None | 0 0
  1. import sys
  2. import os
  3. if not os.environ.get("ONLINE_JUDGE"):
  4.     sys.stdin = open('./in.txt', 'r')
  5.     sys.stdout = open('./out.txt', 'w')
  6.  
  7.  
  8. class DSU:
  9.  
  10.     def __init__(self, n):
  11.         self.p = [i for i in range(n+1)]
  12.         self.rank = [0]*(n+1)
  13.         self.setsize = [1]*(n+1)
  14.         self.numsets = n
  15.  
  16.     def findset(self, i):
  17.         if self.p[i] == i:
  18.             return i
  19.         else:
  20.             self.p[i] = self.findset(self.p[i])
  21.             return self.p[i]
  22.  
  23.     def isSameSet(self, i, j):
  24.         return self.findset(i) == self.findset(j)
  25.  
  26.     def unionSet(self, i, j):
  27.         if self.isSameSet(i, j):
  28.             return
  29.  
  30.         x = self.findset(i)
  31.         y = self.findset(j)
  32.  
  33.         if self.rank[x] > self.rank[y]:
  34.             x, y = y, x
  35.         self.p[x] = y
  36.  
  37.         if self.rank[x] == self.rank[y]:
  38.             self.rank[y] += 1
  39.  
  40.         self.setsize[y] += self.setsize[x]
  41.         self.numsets -= 1
  42.  
  43.     def sizeofset(self, i):
  44.         return self.setsize[self.findset(i)]
  45.  
  46.     def numDisjointSets(self):
  47.         return self.numsets
  48.  
  49.  
  50. n, m = map(int, input().split())
  51.  
  52. dsu = DSU(n)
  53.  
  54. for _ in range(m):
  55.     query = list(map(str, input().split()))
  56.     u, v = int(query[1]), int(query[2])
  57.     if query[0] == 'union':
  58.         dsu.unionSet(u, v)
  59.     else:
  60.         if dsu.findset(u) == dsu.findset(v):
  61.             print("YES")
  62.         else:
  63.             print("NO")
  64.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement