#P9524. [JOIST 2022] 飞机旅行 / Flights
[JOIST 2022] 飞机旅行 / Flights
Description
In Republic of JOI, there are airports numbered from to . There are airline routes numbered from to . The airline route () connects the airport and the airport bidirectionally. It is possible to travel from any airport to any other airport by connecting several airline routes. For every airport, there are at most 3 airline routes connecting it with another airport.
Benjamin is planning to take a trip in Republic of JOI. On the last day of the trip, he wants to arrive at the airport where the hot spring is located. The amusement park is located at the airport , and the hot spring is located at the airport . Since Benjamin does not know anything about the airline routes, he will communicate with Ali, a staff of the airplane company. Benjamin wants to know the minimum number of airline routes he has to take to travel from the airport where the amusement park is located to the airport where the hot spring is located. Ali knows information of the airline routes. But Benjamin does not know which airline routes he has to take.
- Ali sets an ID code for each airport. An ID code is an integer between and , inclusive.
- Benjamin gets the ID code of the airport where the amusement park is located, and the ID code of the airport where the hot spring is located.
- Benjamin sends an e-mail message to Ali. The message is a string whose length is exactly equal to 20. Every character of the message is either 0 or 1.
- Ali writes a letter to Benjamin. The letter contains a string whose length is between 1 and 300 000, inclusive. Every character of the letter is either 0 or 1.
Write programs which implement the strategy of Ali, a staff of the airplane company, and the strategy of Benjamin, a traveler. Note that in Step 2, Benjamin can get the ID codes of the airports where the amusement park and the hot spring are located. However, Benjamin cannot get the airport numbers .

Implementation Details
You need to submit two files.
The first file is Ali.cpp. It should implement Ali's strategy. It should implement the following two functions. The program should include Ali.h using the preprocessing directive #include.
void Init(int N, std::vector<int> U, std::vector<int> V)This function implements Ali's strategy to set ID codes for each airport. For each scenario (see Grading for details), this function is called exactly once.- The parameter is the number of airports in Republic of JOI.
- The parameters , are arrays of length . This means , are the airports connected by the airline route ().
std::string SendA(std::string S)This function implements Ali's strategy to send a letter to Benjamin. For each scenario (see Grading for details), this function is called exactly once after the functionSendB(see below) is called.- The parameter is a string of length 20. It is an e-mail message sent by Benjamin to Ali.
- The function
SendAshould return a string. It is a letter written by Ali to Benjamin. - The return value should be a string whose length is between 1 and 300 000, inclusive. If this condition is not satisfied, your program is judged as Wrong Answer [5].
- Each character of the return value should be either 0 or 1. If this condition is not satisfied, your program is judged as Wrong Answer [6].
For each function call to Init, the following function should be called once for each airport. In total, it should be called times.
void SetID(int p, int value)- The parameter means Ali sets the ID code for the airport . Here should be satisfied. If this condition is not satisfied, your program is judged as Wrong Answer [1].
- The parameter
valueis the ID code for the airport specified by Ali. Here should be satisfied. If this condition is not satisfied, your program is judged as Wrong Answer [2]. - It is not allowed to call the function
SetIDwith same parameter more than once. If this condition is not satisfied, your program is judged as Wrong Answer [3]. - When the function
Initterminates, the number of function calls toSetIDshould be . If this condition is not satisfied, your program is judged as Wrong Answer [4].
When the function call to SetID is judged as Wrong Answer, your program is terminated immediately.
The second file is Benjamin.cpp. It should implement Benjamin's strategy. It should implement the following two functions. The program should include Benjamin.h using the preprocessing directive #include.
std::string SendB(int N, int X, int Y)This function implements Benjamin's strategy to send an e-mail message to Ali. For each scenario (see Grading for details), this function is called exactly once after the functionInitis called.- The parameter is the number of airports in Republic of JOI.
- The parameter is the ID code of the airport where the amusement park is located.
- The parameter is the ID code of the airport where the hot spring is located.
- The function
SendBshould return a string which is the e-mail message sent by Benjamin to Ali. - If the return value is not a string of length 20, your program is judged as Wrong Answer [7].
- Each character of the return value should be either 0 or 1. If this condition is not satisfied, your program is judged as Wrong Answer [8].
int Answer(std::string T)This function should calculate the minimum number of airline routes Benjamin has to take to travel from the airport to the airport . For each scenario (see Grading for details), this function is called exactly once after the functionSendAis called.- The parameter is a string whose length is between 1 and 300 000, inclusive. It is the letter sent by Ali to Benjamin.
- This function should return the minimum number of airline routes Benjamin has to take to travel from the airport to the airport .
Important Notices
- Your program can implement other functions for internal use, or use global variables. Submitted files will be compiled with the grader, and become a single executable file. All global variables and internal functions should be declared in an unnamed namespace to avoid confliction with other files. When it is graded, it will be executed as two processes of Ali and Benjamin. The process of Ali and the process of Benjamin cannot share global variables.
- Your program must not use the standard input and the standard output. Your program must not communicate with other files by any methods. However, your program may output debugging information to the standard error.
Grading
A test case consists of scenarios, numbered from 0 to . The following values are specified for each scenario. For the range of these values, see Constraints.
- The number of airports in Republic of JOI.
- The airport number of the airport where the amusement park is located.
- The airport number of the airport where the hot spring is located.
- The information of the airline routes .
For each scenario, the functions Init, SendB, SendA, Answer are called. Your program should call appropriate functions with valid parameters, and return appropriate values. These functions are called in the following order.
- For , the following procedures 2–5 are performed in this order.
- The function
Initis called. The parameters are set for the scenario as specified in Implementation Details. - The function
SendBis called. The parameters are set for the scenario as specified in Implementation Details. - The function
SendAis called. The parameters are set for the scenario as specified in Implementation Details. - The function
Answeris called. The parameters are set for the scenario as specified in Implementation Details.
If your program is judged as Wrong Answer during these procedures, your program is terminated immediately, and your program is considered to fail the test case.

Compilation and Test Run
You can download an archive file from the contest webpage which contains the sample grader to test your program. The archive file also contains a sample source file of your program.
The sample grader is the file grader.cpp. In order to test your program, put grader.cpp, Ali.cpp, Benjamin.cpp, Ali.h, Benjamin.h in the same directory, and run the following command to compile your programs.
g++ -std=gnu++17 -O2 -o grader grader.cpp Ali.cpp Benjamin.cpp
When the compilation succeeds, the executable file grader is generated.
Note that the actual grader is different from the sample grader. The sample grader will be executed as a single process, which will read input from the standard input and write the results to the standard output.
Input Format
The sample grader reads the following data from the standard input. The input values should be all integers.
(Input for Scenario )
(Input for Scenario )
(Input for Scenario )
The format of the input data for each scenario is as follows.
Output Format
If your program is judged as any one of Wrong Answer [1]-[8], the sample grader writes its type as “Wrong Answer [1]” (quotes for clarity).
Otherwise, for each scenario, it writes the return value of the function Answer and the maximum length of the strings sent by Ali to Benjamin. The sample grader does not check whether the return value of the function Answer is correct or not.
Scenario 0: Your Answer = 3
Scenario 1: Your Answer = 1
Scenario 2: Your Answer = 4
Scenario 3: Your Answer = 1
Scenario 4: Your Answer = 5
Accepted: Maximum Length = 24
If your program satisfies the conditions of several types of Wrong Answer, the sample grader reports only one of them. Moreover, if your program is not judged as Wrong Answer for the first scenario, the sample grader may output intermediate results as follows even if your program is judged as one of Wrong Answer [1]-[8] for a later scenario.
Scenario 0: Your Answer = 3
Scenario 1: Your Answer = 1
Scenario 2: Your Answer = 4
Wrong Answer [8]
Hint
Constraints
- .
- .
- ().
- .
- .
- .
- It is possible to travel from any airport to any other airport by connecting several airline routes.
- For every airport, there are at most 3 airline routes connecting it with another airport.
Subtasks
- (15 points) .
- (85 points) .
Grading for Subtask 1
If your program is judged as Wrong Answer in any of the scenarios for Subtask 1, your score for this subtask is 0.
If your program answers all the test cases for Subtask 1 correctly, your score for this subtask is calculated as follows. Here, is the maximum length of the strings sent by Ali to Benjamin.
| The value of | Score |
|---|---|
| 7 points | |
| 11 points | |
| 15 points |
Grading for Subtask 2
If your program is judged as Wrong Answer in any of the scenarios for Subtask 2, your score for this subtask is 0.
If your program answers all the test cases for Subtask 2 correctly, your score for this subtask is calculated as follows. Here, is the maximum length of the strings sent by Ali to Benjamin. Note that if , your score for this subtask is 0.
| The value of | Score |
|---|---|
| 0 points | |
| points (rounded down to the nearest integer) | |
| points (rounded down to the nearest integer) | |
| points | |
| 85 points |
Sample Communication
Here is a sample input for the sample grader and corresponding function calls. In the following example, the ID codes of the airports 0, 1, 2, 3 set by Ali by calling the function Init are 12, 21, 25, 27, respectively.
Sample Input 1
1
4 0 2
0 1
1 2
2 3
| Ali's Call | Ali's Return Value | Benjamin's Call | Benjamin's Return Value |
|---|---|---|---|
In this sample input, there are airports and three airline routes.
- An airline route connecting the airport 0 with the airport 1.
- An airline route connecting the airport 1 with the airport 2.
- An airline route connecting the airport 2 with the airport 3.
Since we need to take at least two airline routes to travel from the airport to the airport , the function Answer should return 2.
Note that the return value of the function SendB is not the airport numbers . It returns the ID codes of the airports .
Sample Input 2
2
10 0 9
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
15 12 8
0 1
0 2
1 3
1 4
2 5
2 6
3 7
3 8
4 9
4 10
5 11
5 12
6 13
6 14
In this sample input, there are scenarios.
- For the first scenario, the function
Answershould return 9. - For the second scenario, the function
Answershould return 6.
京公网安备 11011102002149号