Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.49 KB | None | 0 0
  1. n = 6
  2. edges = [[1, 4], [4, 5], [2, 3]]
  3. newEdges = [[1, 2, 5], [1, 3, 10], [1, 6, 2], [5, 6, 5]]
  4. newEdges = sorted(newEdges,key=lambda x:x[2])
  5.  
  6. class makeSet:
  7.     def __init__(self,i):
  8.         self.val = i
  9.         self.parent = i
  10.         self.rank = 0
  11.  
  12. def find(i):
  13.     if get_set[i].parent != i:
  14.         get_set[i].parent = find(get_set[i].parent)
  15.     return get_set[i].parent
  16.    
  17. def union(a,b):    
  18.     x = get_set[find(a)]
  19.     y = get_set[find(b)]
  20.     print(x,y)
  21.     if x.val == y.val:
  22.         return False
  23.     if x.rank < y.rank:
  24.         x.rank = y.rank
  25.         x.parent = y.val
  26.     if x.rank > y.rank:
  27.         y.rank = x.rank
  28.         y.parent = x.val
  29.     if x.rank == y.rank:
  30.         x.rank += 1
  31.         y.parent = x.val
  32.     return True
  33.  
  34. get_set = {}
  35. for edge in edges:
  36.     if edge[0] not in get_set:
  37.         get_set[edge[0]] = makeSet(edge[0])
  38.     if edge[1] not in get_set:
  39.         get_set[edge[1]] = makeSet(edge[1])
  40.     union(edge[0],edge[1])
  41.     print(edge[0],find(edge[0]))
  42.     print(edge[1],find(edge[1]))
  43.  
  44.  
  45. newEdges = sorted(newEdges,key=lambda x:x[2])
  46. total_cost = 0
  47. for edge in newEdges:
  48.     if edge[0] not in get_set:
  49.         get_set[edge[0]] = makeSet(edge[0])
  50.     if edge[1] not in get_set:
  51.         get_set[edge[1]] = makeSet(edge[1])
  52.     #print(get_set[edge[1]].parent)
  53.     print(edge[0],find(edge[0]))
  54.     print(edge[1],find(edge[1]))
  55.     a = union(edge[0],edge[1])
  56.     print(edge,a)
  57.     if a:
  58.         total_cost += edge[2]
  59.         print(total_cost)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement