문제 주소: https://www.acmicpc.net/problem/11725
난이도: tier 2
parent = [0 for _ in range(N+1)] #처음에는 다 0으로 초기화 한다.
def DFS(start, tree, parent):
for i in tree[start]:
if parent[i] == 0:
parent[i] = start
DFS(i, tree, parent)
DFS(1, tree, parent) #1이 루트니까 1부터 시작
#시간복잡도 통과한 코드
import sys
N = int(input())
sys.setrecursionlimit(10**9)
tree = [[] for i in range(N + 1)]
parent = [0 for _ in range(N+1)]
for _ in range(N - 1):
n1, n2 = map(int, input().split())
tree[n1].append(n2)
tree[n2].append(n1)
def DFS(start, tree, parent):
for i in tree[start]:
if parent[i] == 0:
parent[i] = start
DFS(i, tree, parent)
DFS(1, tree, parent)
for i in range(2, N+1):
print(parent[i])
#2번노드부터 DFS를 통해 1을 찾는 방법으로 했는데, 매우 비효율적이다.
#트리의 특성상 결국에는 모두 연결되어있다. 따라서 최악의 경우 O(N^2)의 시간복잡도가 발생할수도 있다.
N = int(input())
tree = [[] for i in range(N + 1)]
for _ in range(N - 1):
n1, n2 = map(int, input().split())
tree[n1].append(n2)
tree[n2].append(n1)
def find_parent(tree, start):
traced.append(start)
#print(traced)
for node in tree[start]:
if node == 1:
if traced[0] == start:
return print(node)
else:
return print(traced[1])
else:
if node not in visited:
visited.add(node)
find_parent(tree, node)
for i in range(2,N+1):
traced = []
visited = set()
find_parent(tree, i)
import sys
from collections import deque
input = sys.stdin.readline
n = int(input())
tree = [[] for _ in range(n + 1)]
parent = [0 for _ in range(n + 1)]
for _ in range(n - 1):
n1, n2 = map(int, input().split())
tree[n1].append(n2)
tree[n2].append(n1)
def bfs():
q = deque([1])
while q:
node = q.popleft()
for i in tree[node]:
if parent[i] == 0:
parent[i] = node
q.append(i)
return parent
bfs()
for i in parent[2:]:
print(i)