2858. Minimum Edge Reversals So Every Node Is Reachable
Tags:
Reroot?
class Solution:
def minEdgeReversals(self, n: int, edges: List[List[int]]) -> List[int]:
M = defaultdict(list)
for v1, v2 in edges:
M[v1].append((v2, 0))
M[v2].append((v1, 1))
res = [0] * n
@cache
def dfs(i, p):
rr = 0
for ii, v in M[i]:
if ii == p:
continue
rr += dfs(ii, i) + v
return rr
@cache
def dfs2(i, p, count):
res[i] = count
for ii, v in M[i]:
if ii == p:
continue
if v == 1:
dfs2(ii, i, count - 1)
else:
dfs2(ii, i, count + 1)
r = dfs(0, -1)
dfs2(0, -1, r)
return res