| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1.5 초 | 1024 MB | 94 | 23 | 15 | 23.438% |
KOI 마을은 $N$개의 집과 집들을 잇는 $N - 1$개의 양방향 도로로 이루어져 있으며, 임의의 서로 다른 두 집들을 도로만을 사용하여 오갈 수 있다. 즉, KOI 마을의 도로망은 트리 구조를 이룬다.
KOI 마을의 집들에는 $0$부터 $N − 1$까지의 서로 다른 번호가 붙어 있으며, KOI 마을의 도로들에는 $0$부터 $N - 2$까지의 서로 다른 번호가 붙어 있다. 모든 $0 ≤ i ≤ N - 2$에 대해 $i$번 도로는 $A[i]$번 집과 $B[i]$번 집을 연결하며 길이는 $D[i]$미터이다.
최근 KOI 마을에 도둑이 자주 들어 주민들이 어려움을 겪고 있다. 이에 KOI 마을의 한 집에 경찰을 대기시켜, 도둑이 나타났을 때를 대비하려고 한다. KOI 마을의 사람들은 도둑이 드는 상황에서 경찰이 얼마나 빠르게 도둑을 잡을 수 있을지 궁금해졌다.
여러분에게 $Q$개의 시나리오가 주어진다. 시나리오에는 $0$부터 $Q - 1$까지의 서로 다른 번호가 붙어 있다. 하나의 시나리오는 다음과 같이 이루어진다.
여러분은 각 시나리오마다 도둑이 잡히는 데에 걸리는 시간을 구해야 한다.
여러분은 아래 함수를 구현해야 한다.
vector<array<long long, 2>> police_thief(vector<int> A, vector<int> B, vector<int> D, vector<int> P, vector<int> V1, vector<int> T, vector<int> V2)
제출하는 소스 코드의 어느 부분에서도 입출력 함수를 실행해서는 안 된다.
| 번호 | 배점 | 제한 |
|---|---|---|
| 1 | 15 |
$N ≤ 5\, 000$ $Q ≤ 5 \,000$ |
| 2 | 21 |
$N ≤ 50\, 000$ $Q ≤ 50\, 000$ |
| 3 | 5 | 모든 $0 ≤ i ≤ N - 2$에 대해 $A[i] = i$, $B[i] = i + 1$ |
| 4 | 6 | 모든 $0 ≤ i ≤ N - 2$에 대해 $A[i] = 0$, $B[i] = i + 1$ |
| 5 | 14 | 모든 $0 ≤ j ≤ Q - 1$에 대해 $V1[j] ≤ V2[j]$ |
| 6 | 9 | 모든 $0 ≤ j ≤ Q - 1$에 대해 $P[j]$번 집과 $T[j]$번 집을 잇는 단순 경로 상의 도로의 개수는 $10$개 이하 |
| 7 | 9 | 모든 $0 ≤ j ≤ Q - 1$에 대해 $P[j] = 0$ |
| 8 | 10 | 모든 $0 ≤ j ≤ Q - 1$에 대해 $T[j] = 0$ |
| 9 | 11 | 추가적인 제약 조건이 없다. |
$N = 4$, $Q = 3$, $A = [0, 0, 0]$, $B = [1, 2, 3]$, $D = [557912, 517656, 275807]$, $P = [3, 0, 0]$, $V1 = [265381, 190435, 195025]$, $T = [0, 2, 3]$, $V2 = [1000000, 12345, 67890]$인 경우를 생각해 보자.
그레이더는 다음과 같이 함수를 호출한다.
police_thief([0, 0, 0], [1, 2, 3], [557912, 517656, 275807], [3, 0, 0], [265381, 190435, 195025], [0, 2, 3], [1000000, 12345, 67890])
아래 그림은 KOI 마을의 구조를 나타낸다.
$0$번 시나리오에서 도둑은 $1$번 집으로 향하는 경로를 따라 이동하며, $1$번 집에서 잡히게 된다. $1$번과 $2$번 시나리오에서 도둑은 출발하는 집에서 움직이지 않는다.
함수의 반환값으로 가능한 값은 $[[833719, 265381], [517656, 190435], [275807, 195025]]$가 있다. 이 외에도 $[[833719, 265381], [517656, 190435], [551614, 390050]]$ 등이 가능한 반환값이 된다.
$N = 6$, $Q = 4$, $A = [0, 1, 2, 1, 2]$, $B = [1, 2, 3, 4, 5]$, $D = [2, 2, 10, 8, 16]$, $P = [3, 3, 3, 3]$, $V1 = [4, 2, 19, 20]$, $T = [0, 0, 0, 0]$, $V2 = [3, 1, 9, 19]$인 경우를 생각해 보자.
그레이더는 다음과 같이 함수를 호출한다.
police_thief([0, 1, 2, 1, 2], [1, 2, 3, 4, 5], [2, 2, 10, 8, 16], [3, 3, 3, 3], [4, 2, 19, 20], [0, 0, 0, 0], [3, 1, 9, 19])
아래 그림은 KOI 마을의 구조를 나타낸다.
$0$번 시나리오에서 도둑은 $5$번 집으로 향하는 경로를 따라 이동하다가 $2$번 집과 $5$번 집을 연결하는 도로의 중간에서 잡히게 된다.
함수의 반환값으로 가능한 값은 $[[6, 1], [10, 1], [1, 1], [13, 10]]$가 있다.
$N = 10$, $Q = 10$, $A = [4, 2, 9, 9, 3, 7, 1, 6, 5]$, $B = [9, 8, 0, 1, 1, 6, 2, 2, 9]$, $D = [7, 8, 4, 5, 1, 2, 5, 10, 2]$, $P = [3, 0, 5, 2, 0, 5, 5, 7, 9, 8]$, $V1 = [1, 6, 6, 5, 2, 6, 5, 4, 1, 5]$, $T = [5, 5, 9, 1, 6, 2, 0, 1, 8, 4]$, $V2 = [9, 7, 6, 7, 4, 10, 10, 8, 7, 5]$인 경우를 생각해 보자.
그레이더는 다음과 같이 함수를 호출한다.
police_thief([4, 2, 9, 9, 3, 7, 1, 6, 5], [9, 8, 0, 1, 1, 6, 2, 2, 9], [7, 8, 4, 5, 1, 2, 5, 10, 2], [3, 0, 5, 2, 0, 5, 5, 7, 9, 8], [1, 6, 6, 5, 2, 6, 5, 4, 1, 5], [5, 5, 9, 1, 6, 2, 0, 1, 8, 4], [9, 7, 6, 7, 4, 10, 10, 8, 7, 5])
아래 그림은 KOI 마을의 구조를 나타낸다.
함수의 반환값으로 가능한 값은 $[[18, 1], [13, 3], [4, 1], [17, 5], [13, 1], [4, 1], [6, 5], [29, 4], [22, 1], [5, 1]]$가 있다.
$N = 10$, $Q = 10$, $A = [6, 8, 8, 3, 4, 9, 0, 1, 8]$, $B = [7, 5, 2, 9, 1, 7, 4, 3, 4]$, $D = [1, 1, 4, 4, 4, 7, 3, 4, 7]$, $P = [3, 1, 6, 2, 3, 3, 2, 6, 1, 2]$, $V1 = [5, 7, 9, 7, 5, 10, 8, 8, 4, 8]$, $T = [0, 7, 8, 0, 2, 0, 0, 7, 8, 5]$, $V2 = [2, 2, 5, 5, 4, 5, 7, 2, 2, 7]$인 경우를 생각해 보자.
그레이더는 다음과 같이 함수를 호출한다.
police_thief([6, 8, 8, 3, 4, 9, 0, 1, 8], [7, 5, 2, 9, 1, 7, 4, 3, 4], [1, 1, 4, 4, 4, 7, 3, 4, 7], [3, 1, 6, 2, 3, 3, 2, 6, 1, 2], [5, 7, 9, 7, 5, 10, 8, 8, 4, 8], [0, 7, 8, 0, 2, 0, 0, 7, 8, 5], [2, 2, 5, 5, 4, 5, 7, 2, 2, 7])
아래 그림은 KOI 마을의 구조를 나타낸다.
함수의 반환값으로 가능한 값은 $[[11, 5], [16, 7], [31, 9], [4, 1], [19, 5], [11, 10], [31, 8], [1, 6], [15, 4], [3, 1]]$가 있다.
Sample grader는 아래와 같은 형식으로 입력을 받는다.
police_thief가 반환한 배열을 $C$라고 하자. Sample grader는 다음을 출력한다.
Sample grader는 실제 채점에서 사용하는 그레이더와 다를 수 있음에 유의하라.
Olympiad > 국제정보올림피아드 대표학생 선발고사 > 2024 > 1차 선발고사 3번
C++17, C++20, C++17 (Clang), C++20 (Clang)