Untitled
unknown
python
a year ago
1.9 kB
13
Indexable
class Solution(object):
def maxNumEdgesToRemove(self, n, edges):
class UnionFind:
def __init__(self, n):
self.representative = list(range(n + 1))
self.component_size = [1] * (n + 1)
self.components = n
def find_representative(self, x):
if self.representative[x] == x:
return x
self.representative[x] = self.find_representative(self.representative[x])
return self.representative[x]
def perform_union(self, x, y):
x = self.find_representative(x)
y = self.find_representative(y)
if x == y:
return 0
if self.component_size[x] > self.component_size[y]:
self.component_size[x] += self.component_size[y]
self.representative[y] = x
else:
self.component_size[y] += self.component_size[x]
self.representative[x] = y
self.components -= 1
return 1
def is_connected(self):
return self.components == 1
alice = UnionFind(n)
bob = UnionFind(n)
edges_required = 0
for edge in edges:
if edge[0] == 3:
edges_required += (alice.perform_union(edge[1], edge[2]) | bob.perform_union(edge[1], edge[2]))
for edge in edges:
if edge[0] == 2:
edges_required += bob.perform_union(edge[1], edge[2])
elif edge[0] == 1:
edges_required += alice.perform_union(edge[1], edge[2])
if alice.is_connected() and bob.is_connected():
return len(edges) - edges_required
return -1Editor is loading...
Leave a Comment