티스토리 뷰

728x90
반응형

문제

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

입력

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

출력

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

예제

입력1

7
1 6
6 3
3 5
4 1
2 4
4 7

출력1

4
6
1
3
1
4

입력2

12
1 2
1 3
2 4
3 5
3 6
4 7
4 8
5 9
5 10
6 11
6 12

출력2

1
1
2
3
3
4
4
5
5
6
6

코드

from sys import stdin
import collections


class Solution:
    def findParents(self, N: int, graph):
        queue = collections.deque()
        visited = [False] * 100001
        visited[1] = True
        parents = [0] * 100001

        # 루트 1을 뺴서 큐에 넣음
        while graph[1]:
            v = graph[1].pop(0)
            queue.append(v)

        # 큐에서 왼쪽부터 빼면서 그 값의 그래프 딸려 있는거 있나 보고 visited 체크해서 뺴면서 트리 만듬.
        while queue:
            u = queue.popleft()
            visited[u] = True
            while graph[u]:
                v = graph[u].pop(0)
                if not visited[v]:
                    parents[v] = u
                    queue.append(v)
        # 출력
        for i in range(2, N + 1):
            if parents[i] == 0:
                print(1)
            else:
                print(parents[i])


N = int(stdin.readline())
graph = collections.defaultdict(list)

# 입력 받은 값으로 그래프 양방향으로 생성
for i in range(N - 1):
    u, v = map(int, stdin.readline().split())
    graph[u].append(v)
    graph[v].append(u)
Solution().findParents(N, graph)

# 실버 2인데;;; 존나 어려움 젠장 3시간만에 품 ㅋㅋ 난 병신
728x90
반응형
댓글
반응형
250x250
글 보관함
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Total
Today
Yesterday
링크