루트는 레벨 1
부모를 구하자
input = edges
루트가 1이라고 가정했을 때의 부모를 출력-> 위로가는 dfs???
일단 연결해서 그래프부터 만들어보고 생각하자
child = [[0] * n+1]를 만들고 .index()활용
1부터 bfs하는데
기본 bfs 뼈대에 노드 방문할 때마다 child[n].append(다음노드 전부) 똑같이 해주고
bfs 끝나면
for i in range(2, len(child)):
print(child[child[i]의 인덱스])
from collections import deque
import sys
input = sys.stdin.readline
def bfs(check, graph, start,n):
child = [[] for _ in range(n+1)]
que = deque([start])
check[start] = True
while que:
v = que.popleft()
for i in graph[v]:
if not check[i]:
que.append(i)
child[v].append(i) # 부모에 대한 자식 넣기
check[i] = True
return child
n = int(input())
graph = [[] for _ in range(n+1)]
check = [False] * (n+1)
# 그래프 생성
for _ in range(n-1):
a, b = map(int,input().split())
graph[a].append(b)
graph[b].append(a)
# 부모에 대한 자식을 찾았음
child = bfs(check, graph, 1,n)
# 역으로 바꾸기 (자식의 부모 인덱스 반환)
parent = [[] for _ in range(n+1)]
for i in range(1, len(child)):
for j in child[i]:
parent[j].append(i)
# 출력 - (중요...!!!!!!)
for i in range(len(parent)):
if parent[i]:
print(*list(map(int,parent[i])))
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
n = int(input())
tree = [[] for _ in range(n+1)]
par = [-1]*(n+1) # (중요) 부모를 저장하는 자식 배열
# 그래프 생성 - 나와 동일
for _ in range(n-1):
a,b = map(int,input().split())
tree[a].append(b)
tree[b].append(a)
# DFS로
def dfs(n):
for i in tree[n]: # (중요) 현 상태(=부모)의 자식들 꺼내서
if par[i] == -1: # (중요) 자식을 방문 안했으면
par[i] = n # (중요) 자식을 방문처리(= 부모 넣어준다)
dfs(i) # (중요) 자식의 부모찾기 수행
dfs(1)
for i in range(2,n+1):
print(par[i])