#gDHQybttg030603. 1522:网络
1522:网络
1522:网络
题目描述
原题来自:CEOI 1996
一个电话线公司(简称 TLC)正在建立一个新的电话线缆网络,他们连接了若干个地点,编号分别从 到 ,没有两个地点有相同的号码,这些线是双向的并且能使两个地点保持通讯,每个地点的线都终结于电话交换机。每个地点都有一个电话交换机。从每个地点都能通过线缆到达其他任意的地点,然而它并不需要直接连接,它可以通过若干个交换机来到达目的地。
有时候某个地点供电出问题时,交换机就会停止工作。TLC 的工作人员意识到,除非这个地点是不可达的,否则这种情况就会发生,它还会导致一些其它的地点不能互相通讯。在这种情况下我们会称这个地点(错误发生的地方)为灾区。现在工作人员想要写一个程序统计所有灾区的数量。帮帮他们。
输入格式
输入包括若干组测试数据。
每一组是一个网络,每一组测试数据的第一行是地点的总数量 。每组接下来最多有 行包括一个数字表示一个地点和与它相连接的地点的数字。最多 行可以完全描述整个网络,比如,网络中每个直接连接的两个地点被至少一行包括。一行内的所有数字都要用空格隔开。每组数据需要用单独的一个 结束。最后的块只有一行即 。
输出格式
输出除了最后一组,其他每一组的灾区的数量,每个块用一行输出。
样例
样例输入 #1
5
5 1 2 3 4
0
6
2 1 3
5 4 6 2
0
0
样例输出 #1
1
2
样例解释 #1
第一组数据:
- 个地点。
- 输入行:
5 1 2 3 4表示地点 与地点 相连。 - 以
0结束该组。 - 网络图:地点 是中心,与 相连, 之间没有直接连接(除非通过 )。
- 灾区是指:如果该地点损坏,会导致其他某些地点之间不能通讯(即该地点是割点)。
- 地点 是割点(移除后图分裂成 个孤立点),所以灾区数量为 。
第二组数据:
- 个地点。
- 输入行:
2 1 3表示地点 与 相连。 - 输入行:
5 4 6 2表示地点 与 相连。 - 以
0结束该组。 - 网络可能不连通?但题目说“从每个地点都能通过线缆到达其他任意的地点”,所以应该是连通的。需要根据输入构建图,然后求割点数量。
- 灾区(割点)数量为 。
数据范围
时空限制
- 时间限制:1000 ms
- 内存限制:10240 KB
注意:本题是求无向连通图中割点的数量。使用 Tarjan 算法求割点:对于根节点,如果它有两个或以上的子树,则为割点;对于非根节点 ,如果存在一个子节点 满足 ,则 是割点。注意输入格式:每行第一个数字是一个地点,后面是与其直接连接的地点编号。需要处理多组数据,直到 结束。由于 ,可以使用邻接矩阵或邻接表。