#P16106. [ICPC 2019 NAIPC] Planes, Trains, but not Automobiles
[ICPC 2019 NAIPC] Planes, Trains, but not Automobiles
题目描述
当一名旅行推销员可不是件轻松的事。Per 就是这样一名推销员,他想找到一种高效的方式,恰好访问外国所有城市一次。
Per 以一种奇特的方式定义效率,因为他讨厌坐飞机。更糟糕的是,他坚决拒绝使用汽车。Per 最喜欢的交通工具是火车。他乐意尽可能多地乘坐火车。
这个国家的铁路系统非常奇特,也非常有限。所有火车线路都是单向的,一旦有人乘火车离开一个城市,就不存在任何火车线路序列能让他回到那个城市。这是因为国家想通过更昂贵的飞机来赚钱。在这个国家,每个城市都恰好有一个机场,因此你可以乘飞机从任意城市前往任意其他城市。
Per 不仅想知道他需要的最少航班次数,还想知道在那些以最少航班次数完成旅行的路线中,他可以在哪些城市访问机场。你看,Per 喜欢机场的餐厅,他想知道哪些餐厅他可以去,以便选择路线来访问他最喜欢的餐厅。如果他在某个城市乘飞机起飞或降落,就可以访问该城市的机场。注意,Per 可以从任意城市开始。
考虑一个有四个城市的国家,箭头表示单向火车路线:
:::align{center}
:::
Per 可以采取多种可能的旅行路线,但他至少需要乘坐一次飞机。以下是一些(并非全部)使用最少航班次数的可能路线,其中 表示火车行程, 表示飞机行程:
$$\begin{aligned} 1 \rightarrow 2 \rightarrow 4 &\Rightarrow 3 \\ 2 \rightarrow 4 &\Rightarrow 1 \rightarrow 3 \\ 1 \rightarrow 3 \rightarrow 4 &\Rightarrow 2 \end{aligned}$$在这个例子中,每个机场都至少出现在某条路线上。Per 可以选择自己的路线,以便访问他想要的任何机场餐厅。
输入格式
每个测试用例的第一行包含两个空格分隔的整数 ()和 (),其中 是城市数量, 是火车线路的数量。城市编号为 。
接下来的 行,每行包含两个空格分隔的整数 和 (,),表示有一条从城市 到城市 的火车线路(但没有反向线路)。所有火车线路互不相同。
输出格式
输出恰好两行。
第一行输出一个整数,表示 Per 为了访问所有城市所需的最少航班次数。
第二行输出一个空格分隔的整数列表,列出他可以在最少航班次数的路线上访问机场的城市。如果他能在 某一条 使用最少航班次数的路线上访问该城市的机场,则该城市应被列出。按升序输出这些编号。如果没有需要访问的机场,则输出一个空行。
4 4
1 2
1 3
2 4
3 4
1
1 2 3 4
4 3
1 2
2 3
3 4
0
提示
翻译由 DeepSeek V3.2 完成