Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- n = 6
- edges = [[1, 4], [4, 5], [2, 3]]
- newEdges = [[1, 2, 5], [1, 3, 10], [1, 6, 2], [5, 6, 5]]
- newEdges = sorted(newEdges,key=lambda x:x[2])
- class makeSet:
- def __init__(self,i):
- self.val = i
- self.parent = i
- self.rank = 0
- def find(i):
- if get_set[i].parent != i:
- get_set[i].parent = find(get_set[i].parent)
- return get_set[i].parent
- def union(a,b):
- x = get_set[find(a)]
- y = get_set[find(b)]
- print(x,y)
- if x.val == y.val:
- return False
- if x.rank < y.rank:
- x.rank = y.rank
- x.parent = y.val
- if x.rank > y.rank:
- y.rank = x.rank
- y.parent = x.val
- if x.rank == y.rank:
- x.rank += 1
- y.parent = x.val
- return True
- get_set = {}
- for edge in edges:
- if edge[0] not in get_set:
- get_set[edge[0]] = makeSet(edge[0])
- if edge[1] not in get_set:
- get_set[edge[1]] = makeSet(edge[1])
- union(edge[0],edge[1])
- print(edge[0],find(edge[0]))
- print(edge[1],find(edge[1]))
- newEdges = sorted(newEdges,key=lambda x:x[2])
- total_cost = 0
- for edge in newEdges:
- if edge[0] not in get_set:
- get_set[edge[0]] = makeSet(edge[0])
- if edge[1] not in get_set:
- get_set[edge[1]] = makeSet(edge[1])
- #print(get_set[edge[1]].parent)
- print(edge[0],find(edge[0]))
- print(edge[1],find(edge[1]))
- a = union(edge[0],edge[1])
- print(edge,a)
- if a:
- total_cost += edge[2]
- print(total_cost)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement