포럼
문제 USACO0595

포션 파밍

설명

당신은 좋아하는 모바일 게임을 하며, 전설의 소 보스를 물리칠 기회를 잡기 위해 포션을 파밍하려 한다. 게임 맵은 \(1\dots N\)의 번호가 붙은 \(N\) \((2 \leq N \leq 10^5)\)개의 방이 트리를 이루는 \(N-1\)개의 간선으로 연결된 구조이다.

맵은 여러 번의 "탐색"을 통해 돌아다닐 수 있다. 탐색이란 방 \(1\)에서 트리의 다른 어떤 방까지의 단순 경로이다. 한 탐색을 끝내면 방 \(1\)에서 새로운 탐색을 시작할 수 있다. 모든 방이 적어도 한 번의 탐색으로 방문되면 맵이 완성된다. 주 목표는 최소 횟수의 탐색으로 맵을 완성하는 것이다.

부차적인 목표는 가능한 한 많은 포션을 파밍하는 것이다. 각 탐색이 시작되기 전에 맵의 어떤 방에 포션이 하나 생성된다. 현재 탐색에서 포션이 생성된 방을 방문하면 그 포션을 주울 수 있다. 포션을 줍지 않으면 현재 탐색이 끝날 때 포션이 사라지므로, 이후 탐색에서는 주울 수 없다.

당신은 똑똑한 프로그래머라서 게임 파일을 들여다본 끝에 다음 \(N\)번의 탐색 전에 포션이 어디에 나타날지 알아냈다. 최소 횟수의 탐색으로 맵을 완성한다면, 맵에서 파밍할 수 있는 포션의 최대 개수는 얼마인가?

출제: Suhas Nagar

제약

배점

  • 입력 2-7: \(N\le 1000\)
  • 입력 8-15: 추가 제약 없음.

출제: Suhas Nagar

입력 형식

입력의 첫째 줄에 맵의 방 개수를 나타내는 정수 \(N\)이 주어진다.

다음 줄에 공백으로 구분된 \(N\)개의 정수 \(p_1 \: p_2 \: \ldots \: p_N\)이 주어진다 (\(1 \leq p_i \leq N\)). \(p_i\)\(i\)번째 탐색 전에 포션이 나타날 방이다.

마지막으로 \(N-1\)개의 줄에 방 \(a\)\(b\) 사이의 간선을 나타내는, 공백으로 구분된 두 정수 \(a \: b\) \((1 \leq a, b \leq N)\)가 주어진다. 이 간선들이 트리를 이룸이 보장된다.

출력 형식

최소 횟수의 탐색으로 맵을 완성할 때 파밍할 수 있는 포션의 최대 개수를 나타내는 정수 하나를 한 줄에 출력한다.

예제 1
입력
5
5 4 3 2 1
1 2
1 3
3 4
3 5
출력
2
설명

In this case, the minimum number of traversals required to complete the map is
\(3\).

One optimal plan that picks up two potions in three traversals is as follows:

  • Traversal 1: \(1 \rightarrow 3 \rightarrow 5\) (Pick up potion at 5)
  • Traversal 2: \(1 \rightarrow 3 \rightarrow 4\) (Pick up potion at 4)
  • Traversal 3: \(1 \rightarrow 2\) (Forced to complete the map and ignore potion at 3)

Alternatively, we could have also planned our traversals as follows:

  • Traversal 1: \(1 \rightarrow 2\) (no potions)
  • Traversal 2: \(1 \rightarrow 3 \rightarrow 4\) (Pick up potion at 4)
  • Traversal 3: \(1 \rightarrow 3 \rightarrow 5\) (Pick up potion at 3)
문제 정보

riseoj 작성

출처 올림피아드 > USACO > 2023-2024 > January > Silver

태그

평가 및 의견

Potion Farming

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 1 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

Potion Farming

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8