译自 CEOI 2012 Day2 T3「Network」
我们的工程师设计了一个通信网络,它由节点和一些节点对之间的单向直接通信信道(链路)组成。如果有一系列不同的节点 $p_1, p_2, \dots, p_k$,且 $p = p_1, q = p_k$,我们说节点 $q$ 从节点 $p$ 在一条路径上是可达的。这样,对于每一个 $i = 1, \dots, k-1$,都有一个从 $p_i$ 到 $p_{i+1}$ 传输数据的链路。这个网络有一个中心节点 $r$,因此 $r$ 可以通过一条路径到达其他任何节点 $p$,对于任意一对节点 $p$ 和 $q$,从 $p$ 到达 $q$ 的路径最多只有一条。维护者计划对网络进行改进,但尚未决定如何改进。他们正在考虑的一个想法是重新分配中心节点,因此他们想知道对于每个节点,在一条路径上有多少节点是可达的。另一个想法是将网络去中心化,他们还想知道如何引入新的链路,从而使得对于任意一对节点 $p$ 和 $q$,只有一条路径可以从 $p$ 到达节点 $q$,反之亦然。
您将编写一个程序,计算每个节点(子任务 A)的可达节点的数量,并计算使每个节点以独特的方式从每个其他节点可达所需的最小新链路数量。你的程序也需要给出新链接的列表(子任务 B)。