시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1.5 초 | 512 MB | 58 | 28 | 25 | 65.789% |
In Japan, cities are connected by a network of highways. This network consists of N cities and M highways. Each highway connects a pair of distinct cities. No two highways connect the same pair of cities. Cities are numbered from 0 through N - 1, and highways are numbered from 0 through M - 1. You can drive on any highway in both directions. You can travel from any city to any other city by using the highways.
A toll is charged for driving on each highway. The toll for a highway depends on the traffic condition on the highway. The traffic is either light or heavy. When the traffic is light, the toll is A yen (Japanese currency). When the traffic is heavy, the toll is B yen. It's guaranteed that A < B. Note that you know the values of A and B.
You have a machine which, given the traffic conditions of all highways, computes the smallest total toll that one has to pay to travel between the pair of cities S and T (S ≠ T), under the specified traffic conditions.
However, the machine is just a prototype. The values of S and T are fixed (i.e., hardcoded in the machine) and not known to you. You would like to determine S and T. In order to do so, you plan to specify several traffic conditions to the machine, and use the toll values that it outputs to deduce S and T. Since specifying the traffic conditions is costly, you don't want to use the machine many times.
You should implement the following procedure:
find_pair(int N, int[] U, int[] V, int A, int B)
N
: the number of cities.U
and V
: arrays of length M, where M is the number of highways connecting cities. For each i (0 ≤ i ≤ M - 1), the highway i connects the cities U[i]
and V[i]
.A
: the toll for a highway when the traffic is light.B
: the toll for a highway when the traffic is heavy.The procedure find_pair
can call the following function:
int64 ask(int[] w)
w
must be M. The array w
describes the traffic conditions.w[i]
gives the traffic condition on the highway i. The value of w[i]
must be either 0 or 1.
w[i] = 0
means the traffic of the highway i is light.w[i] = 1
means the traffic of the highway i is heavy.w
.find_pair
should call the following procedure to report the answer:
answer(int s, int t)
s
and t
must be the pair S and T (the order does not matter).Let N = 4, M = 4, U = [0, 0, 0, 1], V = [1, 2, 3, 2], A = 1, B = 3, S = 1, and T = 3.
The grader calls find_pair(4, [0, 0, 0, 1], [1, 2, 3, 2], 1, 3)
.
In the figure above, the edge with number i corresponds to the highway i. Some possible calls to ask and the corresponding return values are listed below:
Call | Return |
---|---|
ask([0, 0, 0, 0]) |
2 |
ask([0, 1, 1, 0]) |
4 |
ask([1, 0, 1, 0]) |
5 |
ask([1, 1, 1, 1]) |
6 |
For the function call ask([0, 0, 0, 0])
, the traffic of each highway is light and the toll for each highway is 1. The cheapest route from S = 1 to T = 3 is 1 → 0 → 3. The total toll for this route is 2. Thus, this function returns 2.
For a correct answer, the procedure find_pair
should call answer(1, 3)
or answer(3, 1)
.
번호 | 배점 | 제한 |
---|---|---|
1 | 5 | one of S or T is 0, N ≤ 100, M = N - 1 |
2 | 7 | one of S or T is 0, M = N - 1 |
3 | 6 | M = N - 1, U[i] = i, V[i] = i + 1 (0 ≤ i ≤ M - 1) |
4 | 33 | M = N - 1 |
5 | 18 | A = 1, B = 2 |
6 | 31 | No additional constraints |
Assume your program is judged as Accepted, and makes calls to ask. Then your score P for the test case, depending on its subtask number, is calculated as follows:
Note that your score for each subtask is the minimum of the scores for the test cases in the subtask.
The sample grader reads the input in the following format:
If your program is judged as Accepted, the sample grader prints Accepted: q
, with q
the number of calls to ask
.
If your program is judged as Wrong Answer, it prints Wrong Answer: MSG
, where MSG
is one of:
answered not exactly once
: The procedure answer
was not called exactly once.w is invalid
: The length of w
given to ask is not M or w
[i
] is neither 0 nor 1 for some i (0 ≤ i ≤ M - 1).more than 100 calls to ask
: The function ask
is called more than 100 times.{s, t} is wrong
: The procedure answer
is called with an incorrect pair s
and t
.Olympiad > International Olympiad in Informatics > IOI 2018 > Day 2 5번
C++17, C++14, C++20, C++14 (Clang), C++17 (Clang), C++20 (Clang)