백준 #11725
https://www.acmicpc.net/problem/11725
11725 나무의 부모 찾기
주어는 뿌리가 없는 나무입니다. 이때 트리의 루트를 1로 설정하고 각 노드의 부모를 찾는 프로그램을 작성한다.
www.acmicpc.net
백준 #11725
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
n = int(input())
graph = (() for _ in range(n+1))
level = (0)*(n+1)
visited = (False)*(n+1)
visited(0) = True
for _ in range(n-1):
start, end = map(int, input().split())
graph(start).append(end)
graph(end).append(start)
def dfs(num, value):
value += 1
visited(num) = True
level(num) = value
for i in graph(num):
if visited(i) == False:
dfs(i, value)
dfs(1, 0)
for i in range(2, n+1):
for j in graph(i):
if level(j) == level(i)-1:
print(j)
break
- DFS(또는 BFS)를 사용하는 각 노드에 대해. 심지어저장
- 노드 2에서 노드 n으로 각 노드에 연결된 노드 중 레벨 값이 1보다 작은 노드(레벨 값이 1보다 작기 때문에 해당 노드의 부모임을 의미합니다!)
- 문제의 루트 노드가 1로 주어졌으므로 시작점은 dfs(1,0)으로 주어질 수 있습니다.
- 별도의 레벨 리스트 없이 방문으로 바로 해결 가능!