Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Mar 14, 2025

🧷 문제 링크

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

🧭 풀이 시간

20분

👀 체감 난이도

✏️ 문제 설명

정점이 N개인 트리가 주어지고, 각 정점은 빨강 혹은 파랑으로 색칠되어 있다.
쿼리를 Q개 처리해보자.
각 쿼리는 정수 $u$ 하나로 이루어지며, 다음을 구해야 한다.

  • 임의의 빨간색 정점과 파란색 정점을 연결하는 단순 경로 중에서 $u$번 정점을 경유하는 경로의 개수를 출력한다. 단, $u$가 경로의 시작, 끝점이면 안 된다.

🔍 풀이 방법

[사용한 알고리즘]

  • Rerooting

우선, 트리의 루트를 1로 잡고, $T_n$을 n을 루트로 하는 서브트리라고 가정한다.
$R_n$$B_n$을 각각 $T_n$에 존재하는 빨강, 파랑 정점의 수로 정의한다.

쿼리 $u$에 대한 답이 될 수 있는 경로 중, 시작점과 끝점을 고르는 경우를 살펴보면 크게 세 가지 경우로 나눌 수 있다.

  1. $T_n$에서 n을 제외한 빨간 점, $T_n$에 속하지 않은 파란 점
  2. $T_n$에서 n을 제외한 파란 점, $T_n$에 속하지 않은 빨간 점
  3. n의 자식들을 차례대로 $x_1, x_2, \cdots, x_k$라고 할 때, $T_x$에 속한 빨간 점, $T_x$에 속하지 않고 $T_n$에 속한 n을 제외한 파란 점

DFS 한 번으로 위 세 가지 값들을 모두 구해서 더한 값을 각각 $answer_n$에 저장한다.

⏳ 회고

...

@ShinHeeEul ShinHeeEul merged commit 51c44d8 into main Mar 14, 2025
1 check passed
@oncsr oncsr added the success 👍 해설을 보지 않고 풀었을 때 label Mar 14, 2025
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