class Solution:
def minMalwareSpread(self, graph: List[List[int]], initial: List[int]) -> int:
def dfs(x):
nonlocal vis_start, vis, start
vis[x] = True
for y in range(len(graph)):
if x != y and not vis[y] and graph[x][y] > 0:
vis_start[y].append(start)
dfs(y)
vis_start = [[] for _ in range(len(graph))]
initial_cnt = defaultdict(int)
for start in initial:
vis = [False] * len(graph)
vis_start[start].append(start)
dfs(start)
for start_nodes in vis_start:
if len(start_nodes) == 1:
initial_cnt[start_nodes[0]] += 1
if not initial_cnt: return min(initial)
initial_cnt_list = [(k,v) for k,v in initial_cnt.items()]
initial_cnt_list = sorted(initial_cnt_list, key=lambda x: (-x[1], x[0]))
return initial_cnt_list[0][0]
11-21
569
11-18
554
01-18
444
01-11
424
01-12
401
01-19
392
01-25
389