Guest User

Untitled

a guest
May 26th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 KB | None | 0 0
  1. ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  2. class UFDS:
  3. def __init__(self, n):
  4. self.arr = list(range(n))
  5. def union(self, i, j):
  6. temp = self.arr[i]
  7. for i in range(len(self.arr)):
  8. if self.arr[i] == temp:
  9. self.arr[i] = self.arr[j]
  10. def find(self, i, j):
  11. return self.arr[i] == self.arr[j]
  12. def numComponents(self):
  13. counted = set()
  14. for item in self.arr: counted.add(item)
  15. return len(counted)
  16. def elementsOfA(self):
  17. temp = self.arr[0]
  18. result = ""
  19. for i in range(len(self.arr)):
  20. if self.arr[i] == temp:
  21. result += ALPHABET[i]
  22. return result
  23.  
  24. def convert(hexString):
  25. return bin(int(hexString, 16))[2:].rjust(len(hexString)*4, "0")
  26.  
  27. def parseBinString(n, s):
  28. length = n-1
  29. edges = []
  30. while length > 0:
  31. v = n - length - 1
  32. for i in range(length):
  33. if s[i]=='1': edges.append((v, v+i+1))
  34. ## print(s[:length])
  35. s = s[length:]
  36. length-=1
  37. return edges
  38.  
  39. lines = open('components.in', 'r').readlines()
  40. for line in lines:
  41. items = line.strip().split()
  42. n, s = int(items[0]), convert(items[1])
  43. ufds = UFDS(n)
  44. edges = parseBinString(n, s)
  45. ## print(s)
  46. ## print(edges)
  47. for (v, w) in edges:
  48. ufds.union(v, w)
  49. print(ufds.numComponents(), ufds.elementsOfA())
Add Comment
Please, Sign In to add comment