Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Aug 13, 2025

🧷 문제 링크

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

🧭 풀이 시간

40분

👀 체감 난이도

✏️ 문제 설명

N개의 캣타워가 트리 형태로 주어진다.
캣타워들은 각각 높이가 1부터 N까지 겹치지 않게 구성되어 있다.

처음에, 고양이 한 마리가 높이 N인 캣타워에 있다.
캣타워에 장애물을 하나씩 놓을 수 있으며, 장애물의 위치에 따라 두 가지 경우로 나뉜다.

  1. 장애물을 놓은 곳에 고양이가 없다면, 아무 일도 일어나지 않는다.
  2. 장애물을 놓은 곳에 고양이가 있다면, 장애물이 없는 곳으로만 계속 이동하여 도달할 수 있는 가장 높은 곳으로 이동한다. 그러한 곳이 없다면 운동이 끝난다.

장애물을 잘 놓아서 고양이의 이동 거리를 최대로 해보자.

🔍 풀이 방법

  • 분리 집합
  • 희소 배열

s[u] = u에서 출발했을 때의 최대 이동 거리,
r[u] = u가 속한 컴포넌트에서의 최대 높이
라고 해보자.

낮은 곳부터 처리해야 함은 직관적으로 알 수 있다. -> 간선을 max(u,v)가 작은 순으로 정렬시키고 생각하자.

간선들을 정렬시키고 나면, 간선 (u, v) 에 대해 (u < v 라고 가정)
s[v] = max(s[v], s[r[u]] + dist(r[u], v)) 가 성립하게 된다.

여기서 dist는 트리 상에서 두 점 사이의 거리를 의미하며, 트리를 희소 배열로 전처리 해두면 한 번 당 O(logN)에 구할 수 있다.

⏳ 회고

귀여운 고양이

image

@oncsr oncsr added the success 👍 해설을 보지 않고 풀었을 때 label Aug 13, 2025
@ShinHeeEul ShinHeeEul merged commit d67a83b into main Aug 13, 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