https://www.acmicpc.net/problem/11725
문제
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
7
1 6
6 3
3 5
4 1
2 4
4 7
4
6
1
3
1
4
풀이
- DFS 이므로 재귀를 사용한다.
- 1 부터 체크하면 된다
- 그래프 1부터 연결된 노드들을 체크하고 visited 가 0인 노드에 대해서 visited를 v로 지정한다. 그후 dfs를 또다시 진행한다.
- 백준에 제출할 때, recursionlimit을 정해주어야 에러가 발생하지 않는다.
코드
import sys
sys.setrecursionlimit(10 ** 8)
n = int(sys.stdin.readline())
graph = [[] for i in range (n+1)]
visited = [0 for _ in range (n+1)]
for i in range (n-1):
a,b = map(int, sys.stdin.readline().split())
graph[a].append(b)
graph[b].append(a)
def dfs(v):
for x in graph[v]:
if visited[x] == 0:
visited[x] = v
dfs(x)
dfs(1)
for i in range (2,n+1):
print(visited[i])
'Coding Test > Baekjoon' 카테고리의 다른 글
[백준/BFS] 1325번 - 효율적인 해킹 (Python) (0) | 2024.03.27 |
---|---|
[BJ] 10773 - 제로[Java] (0) | 2023.04.27 |
[백준] 백준 1979번 소수찾기 (0) | 2022.06.24 |