루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
import sys
from collections import deque
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
def dfs(v):
visited[v] = 1
for i in graph[v]:
if not visited[i]:
parent[i] = v
dfs(i)
n = int(input())
graph = [[] for _ in range(n+1)]
visited = [0]*(n+1)
parent = [0]*(n+1)
for _ in range(n-1):
s, e = map(int, input().split())
graph[s].append(e)
graph[e].append(s)
dfs(1)
print(*parent[2:], sep="\n")
각 노드의 부모 노드를 찾는 문제이므로, 그래프 탐색 알고리즘은 BFS/DFS를 통해서 답을 구할 수 있다.
1번 노드를 시작으로 탐색을 해서, 연결된 노드를 차례로 탐색하며 만약 방문하지 않은 노드라면 방문 기록과 부모 노드를 기록하면서 탐색을 한다.