#P15194. [SWERC 2019] Bird Watching

[SWERC 2019] Bird Watching

题目描述

Kiara 正在研究一种行为方式非常奇特的鸟类。它们的移动最好用图的语言来解释:存在一个有向图 GG,其节点是树木,只有当 (Ta,Tb)(T_a, T_b) 是 GG 的一条边时,鸟才能从一棵树 TaT_a 飞到另一棵树 TbT_b。

Kiara 并不知道控制这些鸟类飞行的真实图 GG,但在她之前的实地研究中,Kiara 收集了许多鸟类旅程的数据。利用这些数据,她构建了一个图 PP 来解释它们是如何移动的。Kiara 花了大量时间观察它们,因此她确信,如果一只鸟可以直接从 aa 飞到 bb,那么她至少目击过一次这样的飞行。然而,有可能一只鸟的飞行路径是 aa 到 bb 再到 cc,但她只目击了停靠点 aa 和 cc,于是将 (a,c)(a, c) 添加到了 PP 中。也可能是一只鸟的飞行路径是 aa 到 bb 到 cc 再到 dd,而她只目击了 aa 和 dd,于是将 (a,d)(a, d) 添加到了 PP 中,等等。总而言之,她知道 PP 包含了 GG 的所有边,并且 PP 可能还包含一些其他的边 (a,b)(a, b),这些边在 GG 中存在一条从 aa 到 bb 的路径(注意,PP 可能并不包含所有这样的边)。

对于下一次实地研究,Kiara 决定将基地安置在一棵给定的树 TT 旁边。为了预警鸟类到达 TT,她还希望在鸟类可能飞来的树木(即满足 (T′,T)(T', T) 是 GG 中一条边的那些树 T′T')上安装探测器。由于探测器价格不菲,她只希望在那些她确信 (T′,T)(T', T) 属于 GG 的树 T′T' 上安装探测器。

Kiara 确信一条边 (a,b)(a, b) 属于 GG,当且仅当 (a,b)(a, b) 是 PP 的一条边,并且所有在 PP 中从 aa 开始、在 bb 结束的路径都使用了边 (a,b)(a, b)。Kiara 请你计算集合 S(T)S(T),即所有她确信 (T′,T)(T', T) 是 GG 的一条边的树 T′T'。

输入格式

输入描述图 PP。第一行包含三个空格分隔的整数 NN, MM, 和 TT:NN 是 PP 的节点数,MM 是 PP 的边数,TT 是 Kiara 将要安置基地的树所对应的节点。

接下来的 MM 行描述图 PP 的边。每行包含两个空格分隔的整数 aa 和 bb(0≤a,b<N0 \leq a, b < N 且 a≠ba \neq b),表示 (a,b)∈P(a, b) \in P。保证同一对 (a,b)(a, b) 不会出现两次。

输出格式

你的输出应描述集合 S(T)S(T)。第一行应包含一个整数 LL,即 S(T)S(T) 中的节点数,接下来是 LL 行,每行包含 S(T)S(T) 的一个不同元素。S(T)S(T) 的元素应按升序打印,每行一个元素。

3 3 2
0 1
0 2
1 2
1
1
6 8 2
0 1
0 2
1 2
2 0
2 3
3 4
4 2
2 5
2
1
4

提示

样例解释 1

此示例对应的图如右图所示。节点 11 属于 S(2)S(2),因为(唯一)从 11 到 22 的路径使用了 (1,2)(1, 2)。节点 00 不属于 S(2)S(2),因为路径 0→1→20 \to 1 \to 2 没有使用边 (0,2)(0, 2)。

:::align{center} :::

样例解释 2

此示例对应的图如右图所示。出于与样例 1 相同的原因,节点 00 不属于 S(2)S(2),而 11 属于。节点 33 和 55 不属于 S(2)S(2),因为我们没有边 (3,2)(3, 2) 或 (5,2)(5, 2)。最后,44 属于 S(2)S(2),因为所有从 44 到 22 的路径都使用了边 (4,2)(4, 2)。

:::align{center} :::

数据范围

  • 1≤N,M≤100 0001 \leq N, M \leq 100\,000;
  • 0≤T<N0 \leq T < N。

翻译由 DeepSeek 完成