路由表输出(router)

题目描述

Y 同学所在的实验室中有 nn 台路由器。每次实验开始前,实验员都会预先写好一张全局路由表。

每台路由器有唯一编号,编号范围为 [1,n][1,n]。路由表中共有 mm 条路由信息,按写入先后依次编号为 1m1 \sim m,编号越小表示越早写入。

给定起点路由器 xx,其中第 ii 条路由信息记为 (ui,vi)(u_i,v_i),表示路由器 uiu_iviv_i 之间可以双向转发数据包。

现设起点路由器 xx 在初始时已经收到数据包。定义集合 SS 为所有最终能够收到数据包的路由器集合,其满足:

  • 初始时,xSx \in S
  • 若存在某条路由信息 (ui,vi)(u_i,v_i),且 uiSu_i \in SviSv_i \in S,则可将另一端也加入 SS
  • 不断重复上述过程,直到集合 SS 不再发生变化。

你需要输出集合 SS 中除 xx 以外的所有路由器编号。

注意,输出顺序并不是搜索过程中第一次访问这些路由器的顺序,而是在整个集合 SS 确定之后,再按照路由表的写入顺序统一决定。

具体地,按 i=1,2,,mi=1,2,\dots,m 依次扫描每条路由信息 (ui,vi)(u_i,v_i)

  • uiSu_i \in S,且 vixv_i \ne x,并且 viv_i 尚未输出,则输出 viv_i
  • viSv_i \in S,且 uixu_i \ne x,并且 uiu_i 尚未输出,则输出 uiu_i

每个路由器至多输出一次。

输入格式

第一行输入一个整数 TT,表示实验次数。

接下来共 TT 组实验数据。每组数据格式如下:

  • 第一行输入三个整数 n,m,xn,m,x
  • 接下来 mm 行,每行输入两个整数 ui,viu_i,v_i,表示第 ii 条路由信息。

输出格式

对于每组实验,输出一行:

  • 输出所有最终能够收到数据包的路由器(不含 xx),按题目规定的顺序输出,相邻编号之间用一个空格分隔;
  • 若不存在这样的路由器,则输出 None

样例

样例输入 #1

2
6 6 2
2 4
1 2
4 5
3 6
5 6
2 3
4 1 3
1 2

样例输出 #1

4 1 5 6 3
None

样例解释

11

起点为 x=2x=2

根据所有路由信息,可以确定最终能够收到数据包的路由器集合为:

S=1,2,3,4,5,6S={1,2,3,4,5,6}

也就是说,除起点 22 以外,其余路由器最终都能够收到数据包。

接下来按照路由表的写入顺序依次扫描:

路由表编号 路由信息 输出情况
11 (2,4)(2,4) 输出 44
22 (1,2)(1,2) 输出 11
33 (4,5)(4,5) 输出 55
44 (3,6)(3,6) 先输出 66,再输出 33
55 (5,6)(5,6) 两端均已输出,不再输出
66 (2,3)(2,3) 33 已输出,不再输出

因此答案为:

4 1 5 6 3

22

起点为 x=3x=3

路由表中只有一条路由信息 (1,2)(1,2),与路由器 33 无关,因此最终只有路由器 33 自身能够收到数据包,不存在其他需要输出的路由器。

因此输出:

None

数据范围与约定

对于 100%100\% 的数据,保证:

  • 1T1041 \le T \le 10^4
  • 1n2×1051 \le n \le 2 \times 10^5
  • 0m2×1050 \le m \le 2 \times 10^5
  • 1xn1 \le x \le n
  • 1ui,vin1 \le u_i,v_i \le n
  • 所有实验的 nn 之和不超过 2×1052 \times 10^5
  • 所有实验的 mm 之和不超过 2×1052 \times 10^5
测试点编号 分值 nn \le mm \le 特殊性质
121\sim2 10 1010 2020 特殊性质 A
343\sim4 10310^3 特殊性质 B
585\sim8 20 2×1052\times10^5 特殊性质 C
9129\sim12
131613\sim16
172017\sim20
  • 特殊性质 A:保证 mn1m \le n-1
  • 特殊性质 B:保证图中不存在重边。
  • 特殊性质 C:保证所有路由器最终都能够收到数据包。