Editorial for DMOPC '22 Contest 2 P6 - Yogyakarta Elevators
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Any contiguous subsequence of floors that contains a floor with zero elevators is not reachable. Thus, we will only consider contiguous subsequences in which every floor contains at least one elevator.
Define as the set of elevators which stop within a contiguous subsequence of floors
. Notice that
is reachable if and only if starting from every elevator in
, it is possible to reach all other elevators in
. In other words, if we consider each floor as a set of edges between all pairs of elevators that stop at it,
is reachable if and only if
is a connected graph with edges within
.
Rephrasing the question, each floor represents a set of elevators () and edges between elevators (
), and we want to find the largest contiguous subsequence
such that
contains exactly one connected component.
Observations:
- Notice that because we only care about connectivity, instead of needing
edges for each floor, we can use
edges, connecting each elevator on the floor to the leftmost elevator on that floor.
- Notice that starting at each floor
, the connected components in
for all
only changes at most
times,
times for each introduced elevator, and
times for each edge that connects two distinct components. Thus, for each floor
, there are at most
important
floors where the number of connected components changes. In particular, we only care about the first time each elevator appears and the first
edges which connect distinct components.
- Let
be the first edges which connect distinct components in
. Notice that
.
Algorithm:
Line sweep from to
, at each floor
maintaining:
- The earliest appearance of each elevator, in order of appearance. This can be done by adding the elevators which appear on floor
at the front of the list and then removing duplicates, taking
time.
- The first
edges which connect distinct components. As
each contains at most
edges, we can just create a new DSU and add all of the edges in order, noting the edges which connect distinct components, taking
time.
Then at each floor, add the important edges and elevators to a DSU in order. If at any point contains only one connected component, the
floors after the current update and before the next update creates a reachable contiguous subsequence with
and thus should be considered in the final answer. In total, this takes
time.
Note: Special care should be taken for floors with zero elevators so that we don't consider contiguous subsequences which include them.
Time Complexity:
Comments