Thief of Wealth

문제

루트 없는 트리가 주어진다. 이때, 트리의 루트를 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
profile on loading

Loading...