문제
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
유니온파인드같은 방법을 사용하려 했으나 풀리지 않았고, 잠시 쉬고난 후에 풀어보니 dfs로 금방 풀리는 문제였다.
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
n = int(input().rstrip())
parents = [i for i in range(n+1)] # 자기자신을 부모로하는 정보배열
graph = dict()
for i in range(1, n+1):
graph[i] = []
for _ in range(n-1):
a, b = map(int, input().rstrip().split(" "))
graph[a].append(b)
graph[b].append(a)
def dfs(curr):
global parents, graph
for dest in graph[curr]:
if(parents[dest] == dest):
parents[dest] = curr
dfs(dest)
def answer():
global parents
for i in parents[2:]:
print(i)
dfs(1)
answer()
'개발 > 알고리즘' 카테고리의 다른 글
[BOJ] 1987 알파벳 (0) | 2020.10.25 |
---|---|
[BOJ] 2644 촌수계산 (0) | 2020.10.24 |
[BOJ] 2210 숫자펌프 (0) | 2020.10.23 |
[BOJ] 17141 연구소2 파이썬 (0) | 2020.10.21 |
[BOJ] 치킨배달 파이썬 (0) | 2020.10.20 |