题目
在火星定居的人类致力于将火星发展为第二地球。
但是,草率的选择和不成熟的技术使灾难到来。
为了给火星提供氧气,正在开发中的一种食物感染了突变病毒,变成了释放致命毒气的毒性食物。由于毒气的迅速扩散,人们放弃了发展火星,开始逃跑。
火星的基地分为N个区域,以M个通道连接。所有区域都被连接,没有不被连接的区域。这N个区域中有K个区域存在释放毒气的食物。毒气每一天都会通过通道扩散到相邻的区域。在火星基地的人们为了逃跑需要在基地坚持很久,所以要聚集在毒气晚点扩散到的区域。
[图1]
如[图1]所示,在火星基地中有5个区域,6个通道。而且1号区域内生长着释放毒气的毒性食物。
此时考虑到毒气扩散的速度,1号区域已经布满毒气,一天后3,4号区域将布满毒气。
再过一天,5号区域和2号区域也将布满毒气。为了坚持更长时间,聚集在2号或者5号区域时,能够坚持2天。
[图2]
如[图2]所示,在与[图1]相同的火星基地中,3号区域生长着毒性食物的话,一天后其余所有区域将布满毒气。
毒性食物不是只生长在一个区域。如[图3]所示,火星基地共有7个区域,8个通道,7号和5号区域中生长着毒性食物的话,一天后3号、1号、4号区域,两天后6号区域,三天后2号区域将布满毒气。这是火星基地的人们聚集在2号区域时能够坚持最长时间3天。
[图3]
给定火星基地的信息和毒性食物的区域信息,编写程序,输出火星基地人群能坚持最长时间的区域和在该区域中坚持的天数,来营救人们。
[限制条件]
- 火星基地的区域数N为1以上1000以下的自然数,每个区域以1到N的序号区分。
- 火星基地的通道数M为1以上3000以下的自然数。
- 生长着毒性食物的区域数K为1以上20以下的自然数。
- 相同的通道信息不会多次输入。
- 每个区域都被连接。即,从任何区域经过1个及以上的通道后能够到达其他任何区域。
[输入]
最一开始给出测试用例个数T,然后给出T个测试用例。每个测试用例由多行组成,第一行为火星基地的区域数N和火星基地的通道数M,毒性食物的区域数K,以空格分开。
下一行为K个毒性食物的区域编号,以空格分开。下面的M行为连接不同区域的通道。给出两个区域编号A,B,表示A到B之间存在通道。
[输出]
每个测试用例输出一行。以x (x 为测试用例编号, 从1开始)开头,空一格,输出火星基地的人们躲避的区域编号和坚持的天数。如果有多个区域都可以坚持最长天数时,输出编号小的区域。
[输入输出例子]
(输入)
3
5 6 1
1
1 3
4 3
3 5
5 2
1 4
3 2
5 6 1
3
1 3
4 3
3 5
5 2
1 4
3 2
7 8 2
7 5
6 3
4 1
3 7
4 6
3 1
4 5
5 1
2 6
(输出)
#1 2 2
#2 1 1
#3 2 3
代码
import java.util.*;
public class huoxingtaobao {
static int T, N, M, K;//火星基地区域数N,通道数M,毒性食物区域数K
static int []num;//毒性食物区域编号
static int [][]road;//存储图的边信息
static int area[];//定义一个距离数组,表示初始节点到各个节点的距离,也表示天数
// static Queue<Integer> queue = new LinkedList<>();
public static void main(String[] args) throws E