Editorial for DMOPC '21 Contest 4 P5 - Graph Generator
Submitting an official solution before solving the problem yourself is a bannable offence.
Authors: ,
Subtask 1
There are many different solutions for this subtask. One of them will be addressed here.
Observe that for each generation phase , we essentially add a bridge between a copy of the original graph 
 and the amalgamation of all previous generations. We can greedily build our answer for a generation phase 
 off of the answer for generation phase 
. In this case, let 
 be our graph after 
 generation phases, and let 
 be an active generator node. Here, let 
 be the distance of the shortest path between an unordered pair of nodes 
 and 
, and 
 means a node 
 that is a part of graph 
.
The sum of the shortest paths between all unordered pairs of nodes  after 
 generation phases = Sum of the shortest paths between all unordered pairs of nodes 
 such that both 
 and 
 are a part of the graph created after 
 generation phases + Sum of the shortest paths between all unordered pairs of nodes 
 such that both 
 and 
 are in the copy of the original graph + Sum of the shortest paths between all unordered pairs of nodes 
 such that 
 is a part of the graph created after 
 generation phases and 
 is a part of the copy of the original graph. Let these be known as terms 
 respectively. Term 
 is our previous solution, and term 
 can be precomputed. Term 
 can be easily calculated through simple combinatorics (left as an exercise to the reader).
We can also greedily calculate the sum of all paths between the active generator node  and all other nodes in the graph, with a transition time of 
.
We can precompute  and 
 in 
. As each transition takes 
 time, the total time complexity of the algorithm is 
.
Time Complexity: 
Subtask 2
Observe that graph  is now a complete graph. We can express the graph after 
 generations as a 
 layered 
-nary tree of graphs 
, where 
 is the number of generator nodes in graph 
. The distance between any two nodes on two graphs 
 can be easily calculated in 
 using the graph 
.
Iterating through all pairs of graphs  would inevitably exceed the time limit. However, it is observed that the distance between two graphs after 
 generation phases is at most 
. We can thus use Combinatorics to compute the answer in 
.
Time Complexity: 
Subtask 3
There are a few full solutions. One of them will be addressed here.
First, we should change our way of thinking. For each generation phase, rather than imagining a copy of graph  being attached to each of the 
 active generator nodes in the 
th generation phase, we can imagine one copy of graph 
 being attached to each of the 
 generator nodes in a graph 
 with their bottommost node 1. Thus, we can do something broadly similar to Subtask 1. Here, 
 means the 
th copy of graph 
, and 
 means a generator node 
. Simply put, the sum of the shortest paths between all unordered pairs of nodes 
 after 
 generation phases = Sum of shortest paths between all unordered pairs of nodes such that both nodes are in the same copy of graph 
 + Sum of shortest paths between all unordered pairs of nodes such that both nodes are in the copy of 
 + Sum of shortest paths between all unordered pairs of nodes such that both nodes are in different copies of graph 
 + Sum of shortest paths between all unordered pairs of nodes such that one node is in a copy of graph 
 and the other is in the copy of 
. Let these be known as terms 
 respectively.
Terms  can be quickly precomputed, while term 
 is exactly our answer in the previous iteration. Calculating terms 
 and 
 may seem problematic to calculate, but they can be decomposed into more trivial calculations.
First, let us address Term , the sum of shortest paths between all unordered pairs of nodes such that both nodes are in different copies of graph 
. We can observe a similar phenomenon as in subtask 1, except we have 
 possible bridges of varying lengths. Rather than repetitively performing the same calculations over and over again, we can efficiently combine the 
 calculations into one single calculation.
Where  is the number of nodes in graph 
.
Next, let us address term : the sum of shortest paths between all unordered pairs of nodes such that one node is in a copy of graph 
 and the other is in the copy of 
. It turns out that we are performing calculations nearly identical to those in subtask 1: the only node which changes across the 
 calculations is the generator node used in the copy of 
. Thus, we can combine the 
 calculations into one single calculation.
One problem remains, which is the large term denoting the sum of all paths between the bottommost node 1 and every other node in graph . However, like in subtask 1, this can be greedily calculated with a transition of 
.
We can precompute , 
, 
 and 
 in 
. 
 and 
 have transitions with 
 time complexity. Thus, our transitions have a total time complexity of 
.
Time Complexity: 
Alternative Solution
Another solution is to precompute all distances in  as normal, and then split up all paths into multiple parts. A path can be contained within one copy of 
, or span across copies. In the latter case, there are a few components to consider: the bottom of a path, where we go from the source to node 
, the top, where we go from a source to a generator node, the middle, where we go from a generator node to a source, the LCA node, where we go from a generator node to a generator node, or the transition edge where we transfer across components.
The solution iterates through all  heights of the graph and computes the number of copies on this level and the one below it. Using the precomputed distances that we considered above, we can compute how many edges are contributed for each part of all the paths. For example, to compute the contribution given by the parts of the path that are used as a LCA, take the pairwise sum of the generator nodes, multiply by the number of components at this height, and multiply by the number of nodes in one of the sub-graphs under this level, squared. This is admittedly a rather mathy-solution.
Time Complexity: 
Comments