up[k][i]의 동적 계획법 구성을 내재화합니다.
- 트리를 선형 배열의 연속된 서브트리 구간으로 매핑하는 원리를 습득합니다. # 8053번: 트리 탐색과 서브트리 크기 발췌
size = [0] * (n + 1)
for i in range(n, 1, -1):
p = parent[i - 2]
size[p] += size[i] + 1
# 8054번: 트리의 지름 발췌
u, _ = bfs(1) # 임의의 시작점에서 가장 먼 노드 u 찾기
v, diameter = bfs(u) # u에서 가장 먼 노드 v 찾고 거리 측정
# 8055번: 최소 공통 조상 발췌
# up[k][i] = up[k-1][up[k-1][i]] (2^k번째 조상)
for k in range(LOG, -1, -1):
if (diff >> k) & 1:
a = up[k][a]
for k in range(LOG, -1, -1):
if up[k][a] != up[k][b]:
a = up[k][a]
b = up[k][b]
return up[0][a]
# 8056번: 트리 경로 가중치 쿼리 발췌
# s의 서브트리 [tin[s], tout[s]] 가중치 갱신
range_add(tin[s], tout[s], diff)
# u의 경로 가중치 합 점 쿼리
path_sum = bit_query(tin[u])
sys.setrecursionlimit(300000) 등으로 확장하여 일자 트리 탐색 시 런타임 에러 방지
- **도약 조상 배열 예외**: 1번 루트 노드의 상위 조상을 참조할 때 0 또는 1로 고정하여 배열 인덱스 초과 차단
- **선형화 경계 설정**: 펜윅 트리 구간 업데이트 시 tout[s] + 1 값이 $N+1$ 배열 범위를 초과하지 않도록 크기 제어 보장