https://programmers.co.kr/learn/courses/30/lessons/76503
그래프 dfs 재귀를 깊게 이해하고 있는가를 물어보는 문제였다.
문제에서 나온 그래프가 트리구조라는 정보를 이용해,
트리구조에서 어떤 노드이던지 루트노드가 될 수 있다는 정보를 이용해 dfs재귀를 통해 구현할 수 있었다.
import sys
sys.setrecursionlimit(10000000)
answer = 0
def solution(a, edges):
global answer
n = len(a)
graph = [[] for i in range(n)]
for edge in edges:
graph[edge[0]].append(edge[1])
graph[edge[1]].append(edge[0])
if sum(a) != 0:
return -1
visited = [0]*(n+1)
dfs(a,0,graph,visited)
return answer
def dfs(a,x,graph,visited):
global answer
visited[x] = 1
for t in graph[x]:
if not visited[t]:
a[x] += dfs(a,t,graph,visited)
answer += abs(a[x])
return a[x]