#gDHQybttg030604. 1523:嗅探器
1523:嗅探器
1523:嗅探器
题目描述
某军搞信息对抗实战演习,红军成功地侵入了蓝军的内部网络,蓝军共有两个信息中心,红军计划在某台中间服务器上安装一个嗅探器,从而能够侦听到两个信息中心互相交换的所有信息,但是蓝军的网络相当的庞大,数据包从一个信息中心传到另一个信息中心可以不止有一条通路。现在需要你尽快地解决这个问题,应该把嗅探器安装在哪个中间服务器上才能保证所有的数据包都能被捕获?
输入格式
输入的第一行一个整数 ,表示蓝军网络中服务器的数目。
接下来若干行是对蓝军网络的拓扑结构描述,每行是两个整数 ,表示编号为 和编号为 的两台服务器间存在连接(显然连接是双向的),服务器的编号从 开始,一行两个 表示网络的拓扑结构描述结束,再接下来是两个整数 ,分别表示两个中心服务器的编号。
输出格式
输出编号。如果有多个解输出编号最小的一个,如果找不到任何解,输出 No solution。
样例
样例输入 #1
5
2 1
2 5
1 4
5 3
2 3
5 1
0 0
4 2
样例输出 #1
1
样例解释 #1
- 服务器数 。
- 连接关系(双向):
- 以
0 0结束边输入。 - 两个中心服务器编号:,。
- 需要在某个服务器上安装嗅探器,使得所有从 到 的数据包都经过该服务器(即该服务器是 到 的所有路径的必经点)。
- 服务器 满足条件:所有从 到 的路径必须经过 (因为 只与 相连, 连接 和 ,但 到 不经过 ?检查: 是一条路径, 是另一条,两条都经过 )。所以安装 可以捕获所有数据包。
- 输出 。
数据范围
时空限制
- 时间限制:1000 ms
- 内存限制:562144 KB
注意:本题是求无向图中两点间所有路径的必经点(割点)。可以先从 开始 DFS,记录每个点的 和 ,然后检查每个点 ()是否为割点,并且满足:删除 后, 和 不连通。但注意,不是割点也可能是必经点(比如 或 的邻接点)。更通用的方法是:从 开始 DFS,记录每个点的前驱,然后枚举每个点 (),暂时删除 (标记为不可访问),然后检查 是否能到达 ,如果不能则 是必经点。由于 ,可以枚举每个点并运行 DFS/BFS 检查连通性。注意需要输出编号最小的解。