【题目描述】
某军搞信息对抗实战演习,红军成功地侵入了蓝军的内部网络,蓝军共有两个信息中心,红军计划在某台中间服务器上安装一个嗅探器,从而能够侦听到两个信息中心互相交换的所有信息,但是蓝军的网络相当的庞大,数据包从一个信息中心传到另一个信息中心可以不止有一条通路。现在需要你尽快地解决这个问题,应该把嗅探器安装在哪个中间服务器上才能保证所有的数据包都能被捕获?
【输入格式】
输入文件的第一行一个整数 n,表示蓝军网络中服务器的数目。
接下来若干行是对蓝军网络的拓扑结构描述,每行是两个整数 i , j 表示编号为 i 和编号为 j 的两台服务器间存在连接(显然连接是双向的),服务器的编号从 1 开始,一行两个 0 表示网络的拓补结构描述结束,再接下来是两个整数 a , b 分别表示两个中心服务器的编号。
【输出格式】
输出编号。如果有多个解输出编号最小的一个,如果找不到任何解,输出 No solution
S a m p l e I n p u t Sample~~Input Sample Input
1 1
aaaaaaa
aaa ba
S a m p l e O u t p u t Sample~~Output Sample Output
babaa
【题意分析】
容易发现满足要求的服务器一定在这张图的割点上(在割点上才有可能满足,不是所有的割点都可以)
那么用tarjan跑一遍割点(定哪个为根都可以),然后对于每一个割点,跑一遍bfs判连通性即可。
Code:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#