题目
http://poj.org/problem?id=1236
题意
有N个学校用一些单向的网络连接一起,每个学校得到一套软件后,可以通过单向网络向周边的学校传输。
问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件。
问题2:至少需要添加几条传输线路,使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件。
题目解析
将学校当做点,网络线路当做边,得到一个有向图,算出这个图里所有的强连通分量。因为同一个强连通分量之间的任意两点可以互相连通,所以向一个点发送软件后,与这个点同属于一个强连通分量的点都能收到软件。可以将每个强连通分量都假设为一个点,然后算出所有强连通分量的入度和出度,假设入度为0的强连通分量的个数为d_in0,出度为0的强连通分量的个数为d_out0。问题1的答案等于d_in0;当强连通分量的个数为1时,问题2的答案等于0,当强连通分量的个数大于1时,问题2的答案等于max(d_in0, d_out0)。
代码
1 | /* AC 0MS 356K */ |