Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Oct 1, 2025

🧷 문제 링크

https://www.acmicpc.net/problem/17422

🧭 풀이 시간

30분

👀 체감 난이도

✏️ 문제 설명

정점 N개인 포화 이진 트리의 각 정점에는 w[i]만큼의 지폐가 있다.
이 트리에서 놀이는 아래 과정으로 이루어진다.

  1. 임의의 점을 루트로 잡는다.
  2. 루트에서 내려가며 지폐를 수집한다.
  3. 이렇게 했을 때 모을 수 있는 지폐 개수의 최댓값을 구한다.

Q번의 놀이를 수행해보자. 각 놀이를 시작하기 전에, 한 정점의 지폐 개수를 임의로 바꾼다.

🔍 풀이 방법

  • DP

놀이에서 요구하는 것은 트리의 지름이다.
정점 n에 대해,
$W_n$ = n번 점의 지폐 개수
$L_n$ = n번 점에서 왼쪽으로 내려갔을 때 수집 가능한 최대 지폐 개수
$R_n$ = n번 점에서 오른쪽으로 내려갔을 때 수집 가능한 최대 지폐 개수
$X_n$ = n번 점을 루트로 하는 서브트리의 지름
으로 두고 DP를 수행했다.
$L_n = W_n + \max(L_{2n}, R_{2n})$
$R_n = W_n + \max(L_{2n+1}, R_{2n+1})$
$X_n = \max(X_{2n}, X_{2n+1}, L_n + R_n - W_n)$

업데이트가 주어지면 해당 점부터 모든 조상까지 지나가면서 $L, R, X$를 업데이트 해줬다.

⏳ 회고

이왜플

@oncsr oncsr self-assigned this Oct 1, 2025
@oncsr oncsr added the success 👍 해설을 보지 않고 풀었을 때 label Oct 1, 2025
@ShinHeeEul ShinHeeEul merged commit b6f12b8 into main Oct 1, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants