시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 1024 MB | 43 | 14 | 12 | 35.294% |
수라바야 시는 N개의 분기점이 있는데, 0부터 $N - 1$로 번호가 매겨져 있다. 이 분기점들은 $N - 1$개의 양방향 도로로 연결되어 있고, 0부터 $N - 2$로 번호가 매겨져 있다. 서로 다른 두 분기점을 어떻게 고르더라도 이 둘을 잇는 유일한 경로가 있다. 도로 $i$ ($0 \le i \le N - 2$)는 분기점 $U[i]$와 $V[i]$를 연결한다.
환경 문제에 대한 경각심을 높이기 위해서 수라바야 시의 시장 김 박사는 자동차 없는 날을 지정하려고 한다. 자동차 없는 날 행사로, 김 박사는 도로를 폐쇄하려고 한다. 폐쇄할 도로는 다음과 같이 정해진다. 김 박사는 먼저 음이 아닌 정수 $k$를 고르고, 모든 분기점에 $k$개 이하의 폐쇄되지 않은 도로가 직접 연결되어 있도록 한다. 도로 $i$를 폐쇄하는 비용은 $W[i]$이다.
김 박사를 도와서 가능한 음이 아닌 정수 $k$ ($0 \le k \le N - 1$) 각각에 대해 조건을 만족하게 도로를 폐쇄하는 최소 비용을 구하자.
다음 함수를 구현해야 한다.
int64[] minimum_closure_costs(int N, int[] U, int[] V, int[] W)
다음 호출을 생각해보자.
minimum_closure_costs(5, [0, 0, 0, 2], [1, 2, 3, 4], [1, 4, 3, 2])
이는 총 5개의 분기점이 있고, 이를 잇는 도로 4개가 (0, 1), (0, 2), (0, 3), (2, 4)을 잇고, 이 도로를 폐쇄하는 비용은 각각 1, 4, 3, 2라는 뜻이다.
최소 비용을 구하기 위해서는 다음과 같다.
따라서, minimum_closure_costs
의 리턴값은 [10, 5, 1, 0, 0]이다.
다음 호출을 생각해 보자.
minimum_closure_costs(4, [0, 2, 0], [1, 0, 3], [5, 10, 5])
이는 총 4개의 분기점이 있고, 이를 잇는 도로 3개가 (0, 1), (2, 0), (0, 3)을 잇고, 이 도로를 폐쇄하는 비용은 각각 5, 10, 5라는 뜻이다.
최소 비용을 구하기 위해서는 다음과 같다.
따라서, minimum_closure_costs
의 리턴값은 [20, 10, 5, 0]이다.
번호 | 배점 | 제한 |
---|---|---|
1 | 5 | $U[i] = 0$ (모든 $0 \le i \le N - 2$) |
2 | 7 | $U[i] = i$, $V[i] = i + 1$ (모든 $0 \le i \le N - 2$) |
3 | 14 | $N \le 200$ |
4 | 10 | $N \le 2000$ |
5 | 17 | $W[i] = 1$ (모든 $0 \le i \le N - 2$) |
6 | 25 | $W[i] \le 10$ (모든 $0 \le i \le N - 2$) |
7 | 22 | 추가적인 제약 조건이 없다. |
샘플 그레이더는 입력을 다음 양식으로 읽는다.
샘플 그레이더는 minimum_closure_costs
가 리턴한 배열을 한 줄에 출력한다.
C++17, C++14, C++20, C++14 (Clang), C++17 (Clang), C++20 (Clang)