#yXTTJlydlt60x6702. 学校网络 Network of Schools

学校网络 Network of Schools

好的,这是整理好的题面,不含解题思路,只包含样例解释。


题目描述

一些学校连接在一个计算机网络上,学校之间存在软件支援协议,每个学校都有它应支援的学校名单(学校 AA 支援学校 BB,并不表示 BB 一定要支援 AA)。

当某校获得一个新软件时,无论是直接获得还是通过网络获得,该校都应立即将这个软件通过网络传送给它应支援的学校。

因此,一个新软件若想让所有学校都能使用,只需将其提供给一些学校即可。

现在请你回答两个问题:

  1. 最少需要将一个新软件直接提供给多少个学校,才能使软件能够通过网络被传送到所有学校?
  2. 最少需要添加几条新的支援关系,使得将一个新软件提供给任何一个学校,其他所有学校就都可以通过网络获得该软件?

输入格式

第一行包含整数 NN,表示学校数量。
接下来 NN 行,每行包含一个或多个整数,第 i+1i+1 行表示学校 ii 应该支援的学校名单,每行最后都有一个 00 表示名单结束(只有一个 00 表示该学校没有需要支援的学校)。

输出格式

输出两行,第一行表示问题 1 的答案,第二行表示问题 2 的答案。

数据范围

2N1002 \le N \le 100


输入样例

5
2 4 3 0
4 5 0
0
0
1 0

输出样例

1
2

样例解释

N=5N=5,每个学校的支援名单:

  • 学校 1:支援 2、4、3
  • 学校 2:支援 4、5
  • 学校 3:支援无
  • 学校 4:支援无
  • 学校 5:支援 1

转化为有向图:

  • 1→2, 1→4, 1→3
  • 2→4, 2→5
  • 5→1

图的结构(缩点后):

  • 强连通分量 1:{1,2,5}(因为 1→2, 2→5, 5→1)
  • 强连通分量 2:{3}
  • 强连通分量 3:{4}

问题 1:最少需要给多少个学校发软件,才能传播到所有学校?

需要给每个入度为 0 的强连通分量至少一个学校发软件,因为入度为 0 的分量无法从外部获得软件。

这里的缩点后分量:

  • 分量 {1,2,5}:有来自分量 {3} 的边吗?没有;来自 {4} 吗?没有,所以入度 0。
  • 分量 {3}:有来自 1 的边(1→3),入度 1。
  • 分量 {4}:有来自 1 和 2 的边,入度 1。

所以只有分量 {1,2,5} 入度 0,只需给该分量中任意一个学校发软件,软件就能传播到整个分量,进而通过边传到分量 {3} 和 {4},到达全图。
因此最少发 1 个学校。

输出 1


问题 2:最少添加几条边,使得任意一个学校获得软件就能传到所有学校?

即要让整个图变成强连通。
需要添加的边数 = max(入度为 0 的强连通分量个数, 出度为 0 的强连通分量个数)。但注意若全图已经是一个强连通分量,答案为 0。

这里:

  • 入度为 0 的分量:{1,2,5}(1 个)
  • 出度为 0 的分量:{3}(无出边到其他分量)、{4}(无出边到其他分量),共 2 个。

所以最少添加边数 = max(1, 2) = 2。

输出 2


最终输出

1
2