그래프에 약하다. 우선은 감이 안와서 참고했다.
graph = [[] for _ in range(N+1)]
visited = [False for _ in range(N+1)]
for _ in range(N):
a, b = map(int, input().split()
graph[a].append(b)
graph[b].append(a)
def dfs(v, visited, result):
visited[v] = True
for i in graph[v]:
if not visited[i]:
순회하면서 할 행동
dfs(i, visited, result)
visited랑 parent 배열을 따로 하는 것이 정석이지만
여기선 약간의 기교 및 최적화로 생략하였다.
visited한 노드는 parent값이 무조건 채워지기 때문이다.
코테에서는 이런 거 고민하지 말고 무조건 정석대로 하자.
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
N = int(input())
graph = [[] for _ in range(N+1)]
visited = [None for _ in range(N+1)]
def dfs(v, visited):
for i in graph[v]:
if not visited[i]:
visited[i] = v
dfs(i, visited)
for _ in range(N-1):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
visited[1] = -1
dfs(1, visited)
for i in range(2, N+1):
print(visited[i])
N = int(input())
tree = [[] for _ in range(N+1)]
visited = [False for _ in range(N+1)]
child = [[] for _ in range(N+1)]
def dfs(tree, v, visited, child):
visited[v] = True
for i in tree[v]:
if not visited[i]:
child[v].append(i)
dfs(tree, i, visited, child)
for _ in range(N-1):
a, b = map(int, input().split())
tree[a].append(b)
tree[b].append(a)
dfs(tree, 1, visited, child)
for i in range(1, N+1):
print(child[i])