Skip to content

Commit d15bc40

Browse files
author
Hamid Gasmi
committed
#282 is started
1 parent 8805a9f commit d15bc40

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
class SolutionDisjointSets:
2+
3+
class SolutionDFS:
4+
def largestComponentSize(self, A: List[int]) -> int:
5+
6+
self.vertices_count = len(A)
7+
8+
adjacency_list = self.build_graph(A)
9+
10+
return self.dfs(adjacency_list)
11+
12+
def build_graph(self, A: List[int]) -> List[List[int]]:
13+
14+
factors = dict()
15+
16+
for n in A:
17+
if n not in factors:
18+
factors[n] = set()
19+
self.get_factors(n, factors[n])
20+
21+
adjacency_list = [[] for _ in range(self.vertices_count)]
22+
for i in range(self.vertices_count):
23+
n = A[i]
24+
for j in range(i + 1, self.vertices_count):
25+
m = A[j]
26+
if len(factors[n].intersection(factors[m])):
27+
adjacency_list[i].append(j)
28+
adjacency_list[j].append(i)
29+
30+
return adjacency_list
31+
32+
def get_factors(self, n, factors_set):
33+
34+
factor = 2
35+
while n >= factor * factor:
36+
if n % factor == 0:
37+
factors_set.add(factor)
38+
n //= factor
39+
else:
40+
factor += 1
41+
factors_set.add(n)
42+
43+
def dfs(self, adjacency_list: List[List[int]]) -> int:
44+
45+
visited = [False for _ in range(self.vertices_count)]
46+
47+
largest_component_size = 0
48+
for u in range(self.vertices_count):
49+
if not visited[u]:
50+
largest_component_size = max(largest_component_size, self.explore(u, adjacency_list, visited))
51+
52+
return largest_component_size
53+
54+
def explore(self, u, adjacency_list, visited):
55+
if visited[u]:
56+
return 0
57+
58+
size = 1
59+
visited[u] = True
60+
for v in adjacency_list[u]:
61+
if not visited[v]:
62+
size += self.explore(v, adjacency_list, visited)
63+
64+
return size

0 commit comments

Comments
 (0)