시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 | 1024 MB | 55 | 15 | 14 | 26.415% |
IOI 나라는 $N$개의 도시와 도시들을 잇는 $N - 1$개의 양방향 도로로 이루어져 있으며, 임의의 서로 다른 두 도시를 도로만을 사용하여 오갈 수 있다. 즉, IOI 나라의 도로망은 트리 구조를 이룬다.
도시에는 각각 $0$ 이상 $N - 1$ 이하의 서로 다른 번호가 붙어 있으며, $0$번 도시가 IOI 나라의 수도이다. 또 모든 $0 ≤ i ≤ N - 2$에 대해서 $i$번 도로는 $U[i]$번 도시와 $V[i]$번 도시를 연결하며 도로의 길이는 $W[i]$ km 이다.
IOI 나라에서는 도시별로 택시의 운임이 다르다. 구체적으로, 모든 $0 ≤ i ≤ N - 1$에 대해 $i$번 도시에서 출발하는 택시는 기본 요금 $A[i]$원과 거리 당 요금 $B[i]$원을 가진다. 이는 $i$번 도시에서 택시를 타고 출발하여 $d$ km 만큼 이동할 경우 $A[i] + d \times B[i]$원을 내야 함을 뜻한다.
서현이는 현재 수도인 $0$번 도시에 살고 있다. 서현이는 다른 도시들로 택시를 타고 여행을 떠나려고 한다. 서현이가 어떤 도시에 도착했을 때, 서현이는 타던 택시를 계속 타거나 그 도시에서 출발하는 택시로 갈아탈 수 있다. 물론 택시를 갈아타면 기본 요금을 내야 하며 거리 당 요금도 변할 수 있다. $0$번 도시에서 출발하여 다른 모든 도시들로 가는 데 필요한 최소 비용을 각각 계산하여라.
여러분은 아래 함수를 구현해야 한다.
vector<long long> travel(vector<long long> A, vector<int> B, vector<int> U, vector<int> V, vector<int> W)
제출하는 소스 코드의 어느 부분에서도 입출력 함수를 실행해서는 안 된다.
Sample grader는 아래와 같은 형식으로 입력을 받는다.
Sample grader는 다음을 출력한다.
travel
이 반환한 배열의 $i$번째 원소Sample grader는 실제 채점에서 사용하는 그레이더와 다를 수 있음에 유의하라.
번호 | 배점 | 제한 |
---|---|---|
1 | 7 | $N ≤ 20$ |
2 | 8 | 모든 $i$에 대해 $U[i] = i$; $V[i] = i + 1$ ($0 ≤ i ≤ N - 2$) |
3 | 13 | $N ≤ 2\,000$ |
4 | 17 | 모든 $i$에 대해 $B[i] ≤ 30$ ($0 ≤ i ≤ N - 1$) |
5 | 29 | $B[i] \ne 0$인 $i$가 $2\,000$개 이하. ($0 ≤ i ≤ N - 1$) |
6 | 26 | 추가적인 제약 조건이 없다. |
$N = 5$, $A = [10, 5, 13, 4, 3]$, $B = [10, 7, 5, 9, 1]$, $U = [1, 0, 3, 2]$, $V = [0, 2, 2, 4]$, $W = [1, 5, 10, 3]$인 경우를 생각해 보자.
그레이더는 다음 함수를 호출한다.
travel([10, 5, 13, 4, 3], [10, 7, 5, 9, 1], [1, 0, 3, 2], [0, 2, 2, 4], [1, 5, 10, 3])
아래 그림은 IOI 나라의 지도를 나타낸다.
함수는 $[20, 60, 104, 88]$을 반환해야 한다.
Olympiad > 국제정보올림피아드 대표학생 선발고사 > 2023 > 1차 선발고사 3번
C++17, C++20, C++17 (Clang), C++20 (Clang)