【详解】Network of Schools POJ - 1236 ⭐⭐⭐ 【强连通分量 经典】

Network of Schools POJ - 1236

一些学校连接到了一个计算机网络。网络中的学校间有如下约定:每个学校维护一个列表,当该学校收到软件或信息后将会转发给列表中的所有学校(也就是接收方列表)。需要注意的是如果B学校在A学校的接收方列表中,A学校不一定会出现在B学校的接收方列表中。
你现在的任务是写出一个程序来计算必须收到一份软件来使网络中的所有学校都能收到软件的学校的数量的最小值(此为子任务A)。作为一个远期目标,我们希望给任意一个学校发送一份软件都能使网络中的所有学校都收到软件。为了实现这个目标,我们或许需要在一些学校的接收方列表中添加新项。 你现在需要计算出至少需要添加多少新项才能实现这个远期目标(此为子任务B)。

Input

第一行是一个整数N:计算机网络中的学校数量(2<=N<=100)。接下来有N行数据,接下来的第 i 行描述了第 i 个学校的接收方列表。每行列表以0结尾。如果第 j 行中只有一个0代表第 j 个学校的接收方列表是空的。

Output

你的程序应该在标准输出中输出两行。每一行应为一个整数:第一行为子任务A的解,第二行为子任务B的解。

Examples

Sample Input
5
2 4 3 0
4 5 0
0
0
1 0
Sample Output
1
2

Hint




题意:

最少从几个点出发能够走遍全图
最少加上几条边能够该图变为强连通图

题解:

这道题的输入稍微注意一下
仍然利用DAG的性质来做题, 首先根据缩点后的图建立出入度表, 一个DAG上从入度为0的点出发一定可以走遍当前DAG, 所以第一问输出入度为0的个数

对于一个DAG, 入度为0的一定是起点, 出度为0的一定是终点. 仔细思考一下, 如果只有一个起点显然应该加一条边, 如果只有一个终点也应该加一条边, 都可以使图变为一个强连通图
我们对起点或终点哪个更小, 我们就应该加对应的边数

经验小结:


你可能感兴趣的:(图论)