[Silver II] 트리의 부모 찾기 - 11725

문제 링크

성능 요약

메모리: 130832 KB, 시간: 248 ms

분류

그래프 이론, 그래프 탐색, 트리, 너비 우선 탐색, 깊이 우선 탐색

제출 일자

2026년 04월 25일 22:04:59

문제 설명

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.

출력

첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.


💡 해결 방법

💻 코드

# 시간 제한	메모리 제한	제출	정답	맞힌 사람	정답 비율
# 1 초	256 MB	101736	46530	32584	43.302%
# 문제
# 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
 
# 입력
# 첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
 
# 출력
# 첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
 
# *2 + 1 , *2 + 2
 
n = int(input())
 
edges = dict()#a : parent, left, right)
for i in range(1, n+1):
    edges[i] = []
 
for _ in range(0, n-1):
    a, b = map(int, input().split())
    edges[a].append(b)
    edges[b].append(a)
#print(edges)
 
parents = list(0 for i in range(0, n+1))
#print(parents) #1base
stack = [(1, 0)]
 
while stack:
    node, parent = stack.pop()
    parents[node] = parent
 
    for child in edges[node]:
        if parents[child] == 0:
            stack.append((child, node))
 
 
for i in parents[2:]:
    print(i)