Editorial for Escape de la prisión
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Subtask 1
We can model the prison as a graph where the vertices are the rooms and the edges are the passageways. For each query, we can perform a depth first search to get all vertices on the path from to
(ignoring
) and all vertices on the path from
to
. We can then find the first index in the two paths where the vertices are the same.
Time Complexity: \(O ( N ⋅ Q )\)
Subtask 2
In this subtask, the graph is a line. We can deal with the queries by checking the midpoint of and
(if it exists) and seeing if it will be reached before Besley reaches
and the guard reaches
and if they will meet that midpoint at the same time. It can be seen that there is no other point where they can meet.
Time Complexity:
Alternatively, we could have been solved this subtask with binary search.
Subtask 3
For each vertex, we can store the minimum distance to any vertex on the path from to
, as well as the distance to vertex
. We can see that the answer only exists if the distance of vertex
from vertex
is equal to the distance of vertex
from vertex
, and the distance from vertex
to the path is not equal to the distance from vertex
to vertex
. If these conditions are satisfied, then the answer is equal to the distance from vertex
to the path.
Time Complexity:
Subtask 4
In this subtask, Besley and the guard will meet only if the path from to
intersects the path from
to
. If the tree is rooted at vertex
, then they only intersect if the lowest common ancestor of
and
is on the path from
to
(it is possible to do this without traditional lowest common ancestor algorithms). It can be seen that when this happens, the path from
to
will intersect with the path from
to
over some path of vertices. We can then use a method similar to subtask 2 to determine if they will meet on this path, adjusting for the time the guard first reaches the path from
to
.
Time Complexity:
Subtask 5
In this subtask, we can root the tree at vertex N N . Besley and the guard will only meet if the depth of and
are the same. They will first meet at their lowest common ancestor as long as it is not vertex
. The answer is the difference between the depth of
and the lowest common ancestor of
and
.
Time Complexity:
Subtask 6
It can be proven that if a solution exists, it will always be the middle vertex on the path from
to
.
can be found by first finding the distance between the two vertices using the lowest common ancestor, and then selecting the middle vertex using any standard method (binary lifting, heavy light decomposition, etc...). The distance between two vertices
and
in a tree is \(depth ( u ) + depth ( v ) - 2 ⋅ depth ( lca ( u , v ) )\). Here, a solution exists if and only if
is on both the path from
to
and on the path from
to
and is not
or
. We can check if vertex
is on a path from vertices
to
by checking if the set
is the same as the set
.
Time Complexity: \(O ( ( N + Q ) ⋅ \log N )\)
Comments