Editorial for DMOPC '21 Contest 9 P3 - Terrible Trains
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Subtask 1
For each query, create 2-D points and 2-D points , where is the shortest distance from to . Then, we need to find two points and , one from each set, so that and . For each point in the first set, the set of valid points in the second set forms a rectangular shape in the 2-D plane. Thus, this problem is equivalent to checking whether there is any intersection between a set of points and rectangles, which can be done with line sweep.
Time Complexity:
Subtask 2
Firstly, if or , then it is automatically possible — simply add the new edge between the two stations that are not yet close enough (if they exist). Otherwise, the key observation is that it is always optimal for the endpoints of the additional edge to lie on the shortest path from to and the shortest path from to , possibly with and swapped. After all, if the endpoints do not lie on these shortest paths, they can always be pulled towards them without increasing any of the relevant distances. Secondly, given this fact, note that it is necessary for . It turns out that this is also sufficient: the endpoints can be walked along the shortest paths towards the pair of stations that is too far, keeping the left side of the inequality constant while decreasing the distance between the further pair. Since this decrease occurs smoothly and continuously, the closer pair will not suddenly become too far. Thus, each query can be answered in time.
Time Complexity:
Comments