Notice
Recent Posts
Recent Comments
«   2024/09   »
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
Tags
more
Archives
Today
Total
관리 메뉴

No Limitation

[BFS] 트리의 부모 노드 찾기 본문

프로그래밍

[BFS] 트리의 부모 노드 찾기

yesungcho 2024. 3. 28. 10:55

https://www.acmicpc.net/problem/11725

 

11725번: 트리의 부모 찾기

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

www.acmicpc.net

 

기존에 Union Find의 rank 개념을 활용해서 문제를 풀었고 어지간한 반례를 다 풀었었는데 틀렸습니다가 나온다..ㅠㅠ

그래서 여기저기 공부하다 인접 노드를 활용해 BFS를 이용하여 탐색으로 푼 아래 블로그 분의 포스팅을 참고하였고 공부하는 겸 구현해보았다.
https://velog.io/@dark6ro/%EB%B0%B1%EC%A4%80-11725%EB%B2%88-%ED%8A%B8%EB%A6%AC%EC%9D%98-%EB%B6%80%EB%AA%A8-%EC%B0%BE%EA%B8%B0

 

[백준 11725번] 트리의 부모 찾기

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.시간 : 1 초메모리 : 256 MB첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어

velog.io

 

코드는 아래와 같음

import sys
from collections import deque

N = int(sys.stdin.readline())

graph = {node:[] for node in range(1,N+1)}
graph[1] = [1]
parents = {node:None for node in range(1,N+1)}
parents[1] = 1

for _ in range(N-1) :
    n1, n2 = map(int,sys.stdin.readline().split())
    graph[n1].append(n2)
    graph[n2].append(n1)

queue = deque()
queue.append(1)
current_parents = 1

while queue :
    current_node = queue.popleft()

    for child in graph[current_node] :
        if parents[child] == None :
            parents[child] = current_node
            queue.append(child)

for i in range(2,N+1) :
    print(parents[i])

 

 

'프로그래밍' 카테고리의 다른 글

[완전탐색-DFS] 피로도  (0) 2024.03.31
[최대 힙 기초] 이중우선순위큐  (1) 2024.03.30
[BFS] 일자 기준에 따른 counting  (0) 2024.03.27
[BFS] 동일 Set 유형 2  (0) 2024.03.27
[BFS] 숨바꼭질  (0) 2024.03.24