반응형
-풀이
import sys
sys.setrecursionlimit(10**9)
input = sys.stdin.readline
V = int(input())
graph = [[] for _ in range(V+1)]
visited = [False for _ in range(V+1)]
answer = [0 for _ in range(V+1)]
for _ in range(V-1):
a,b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
def dfs(node):
visited[node] = True
for i in graph[node]:
if visited[i] == False:
answer[i] = node
dfs(i)
dfs(1)
for j in range(2,V+1):
print(answer[j])
-풀이 설명
graph에 간선의 정보를 다 저장한 뒤 dfs함수를 돌려, 부모 노드를 찾아야 하므로, 방문체크를 해주면서, 방문하지 않았을 경우 answer리스트의 인덱스를 자식노드라고 생각하고 그 인덱스에 부모노드(node)를 담아준 뒤, 두 번째 노드부터 차례대로 출력해주면 해결된다.
'알고리즘' 카테고리의 다른 글
[수학] 백준 1735 파이썬(분수 합) 실버3 (0) | 2022.01.09 |
---|---|
[트리] 백준 1167 파이썬 (트리의 지름) 골드3 (0) | 2022.01.08 |
[구현] 백준 1302파이썬 (베스트셀러) 실버4 (0) | 2022.01.06 |
[백트래킹,순열] 15649파이썬 (N과 M (1)) 실버3 (0) | 2022.01.04 |
[백트래킹,조합] 1759 파이썬 (암호 만들기) 골드5 (0) | 2022.01.03 |