Editorial for COI '15 #4 Torrent
Submitting an official solution before solving the problem yourself is a bannable offence.
Let's first solve the simpler problem where there is only one source. Let's denote with the minimal time needed for a file to spread over the subtree of node
(if we already have the file in node
, but not in the other nodes of the subtree).
Let's denote the children of node with
. If the file is spread over node
first, then
and so on, the total time will be
. Therefore, we need to choose the optimal order of sending the file to the children. It's intuitively clear that it is best to first send the file to the node in which the further sending requires the most amount of time, so node
that maximizes
. This is easy to see, if we assume that we have a pair of children that are not in sorted order, in other words,
and
. Then they potentially contribute to the maximum with
, which is strictly larger than
, so the substitution of these two nodes cannot worsen the total time. Therefore, it is truly optimal to sort the children.
We have the relation: , where
are sorted descendingly by
. The direct implementation is of the complexity
.
Let's now return to the problem with two sources, and
. Let's observe the path from
to
. It is clear that, in the optimal spreading of the file on it, there will exist an edge
such that the file will come to node
from
and to
from
. This is why the optimal spreading would carry out identically even if we erased the edge
and split the tree into two components. If we knew which edge we need to erase, we would just do it and solve the problem for a single source on both given components. The maximum of these two times would be optimal.
One solution is to try edge after edge on the path from to
and take the best. The complexity of this algorithm is
, because we use the
algorithm to solve the task with a single source of complexity
times.
Let's denote the edge from to
with numbers from
to
. Let's denote
as the time required to spread over the component of
if we erased the edge
. Analogously, let's use
for the component of
. The solution is then
.
A crucial observation is that, as we traverse from to
, the component in which node
is in (after erasing an edge) becomes larger, so the total time to spread the file over the component of
can't be reduced. For the component of
, the analogous observation applies, the time cannot increase.
Therefore, sequence is ascending, and
is descending. So, if we have
for which
, the lesser maximum can be found only for a larger
. The similar applies for
. Therefore, the optimal edge can be found using binary search. The total complexity is then
.
For the curious reader: Try to reduce the complexity of the algorithm for a single source. Solve the task if, initially, the file is located on three computers (using the same limitations).
Comments