#P6255. [ICPC 2019 WF] Dead-End Detector

[ICPC 2019 WF] Dead-End Detector

题目描述

你所在家乡的市政委员会决定改善道路标志的设置,特别是对于死胡同的标志。他们给了你一张道路地图,你需要确定在哪里设置标志来标记死胡同。他们希望你使用尽可能少的标志。

这张道路地图是由通过双向街道连接的多个地点组成的。以下规则描述了如何完成死胡同标志的设置。考虑一条街道 SS 连接地点 xx 和另一个地点。如果从 xx 进入 SS 后,无法在不掉头的情况下返回 xx,则在 SS 的 xx 入口处设置一个死胡同标志。掉头是指立即反向的 180 度转弯。

为了节省成本,你决定不安装冗余的死胡同标志,具体规则如下。考虑一条在 xx 入口处有死胡同标志的街道 SS 和另一条在 yy 入口处有死胡同标志的街道 TT。如果从 xx 进入 SS 后,可以在不掉头的情况下到达 yy 并进入 TT,那么 TT 的 yy 入口处的死胡同标志是冗余的。参见图 E.1 以获取示例。

图 E.1:示例输入的说明,指示放置非冗余死胡同标志的位置。

输入格式

输入的第一行包含两个整数 nn 和 mm,其中 nn (1≤n≤5×105)(1 \leq n \leq 5\times10^5) 是地点的数量,mm (0≤m≤5×105)(0 \leq m \leq 5 \times 10^5) 是街道的数量。接下来的 mm 行中的每一行包含两个整数 vv 和 ww (1≤v<w≤n)(1 \leq v < w \leq n),表示有一条双向街道连接地点 vv 和 ww。输入中的所有地点对都是不同的。

输出格式

第一行输出 kk,表示安装的死胡同标志的数量。在接下来的 kk 行中,每行输出两个整数 vv 和 ww,表示在连接地点 vv 和 ww 的街道的 vv 入口处应安装一个死胡同标志。描述死胡同标志的行必须按 vv 位置升序排序,若有相同则按 ww 位置升序排序。

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

2
4 5
6 5
8 8
1 2
1 3
2 3
3 4
1 5
1 6
6 7
6 8

3
1 5
1 6
3 4

提示

来源:ICPC 世界总决赛 2019 问题 E。

题面翻译由 ChatGPT-4o 提供。