In Japan, cities are connected by a network of highways.
This network consists of
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
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
However, the machine is just a prototype.
The values of
Implementation Details
You should implement the following procedure:
find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B)
N
: the number of cities.U
andV
: arrays of length , where is the number of highways connecting cities. For each , the highway connects the citiesU[i]
andV[i]
.A
: the toll for a highway when the traffic is light.B
: the toll for a highway when the traffic is heavy.- This procedure is called exactly once for each test case.
The procedure find_pair
can call the following function:
long long ask(const std::vector<int> &w)
- The length of
w
must be . The arrayw
describes the traffic conditions. For each ,w[i]
gives the traffic condition on the highway . The value ofw[i]
must be either or .w[i] = 0
means the traffic of the highway is light.w[i] = 1
means the traffic of the highway is heavy.
- This function returns the smallest total toll for travelling between the cities
and , under the traffic conditions specified byw
. - This function can be called at most
times (for each test case).
find_pair
should call the following procedure to report the answer:
answer(int s, int t)
s
andt
must be the pair and (the order does not matter).- This procedure must be called exactly once.
If some of the above conditions are not satisfied, your program is judged as Wrong Answer.
Otherwise, your program is judged as Accepted and your score is calculated by the number of calls to ask
(see Subtasks).
Example
Let
The grader calls find_pair(4, {0, 0, 0, 1}, {1, 2, 3, 2}, 1, 3)
.
In the figure above, the edge with number 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
For a correct answer, the procedure find_pair
should call answer(1, 3)
or answer(3, 1)
.
Constraints
- For each
- You can travel from any city to any other city by using the highways.
- In this problem, the grader is NOT adaptive. This means that
and are fixed at the beginning of the running of the grader and they do not depend on the queries asked by your solution.
Subtasks
- (5 points) one of
or is , , - (7 points) one of
or is , - (6 points)
, , - (33 points)
- (18 points)
, - (31 points) No additional constraints
Assume your program is judged as Accepted, and makes ask
.
Then your score
- Subtask 1.
. - Subtask 2. If
, . Otherwise . - Subtask 3. If
, . Otherwise . - Subtask 4. If
, . Otherwise . - Subtask 5. If
, . Otherwise . - Subtask 6.
- If
, . - If
, . - If
, .
- If
Note that your score for each subtask is the minimum of the scores for the test cases in the subtask.
Comments