QOJ.ac

QOJ

Límite de tiempo: 5 s Límite de memoria: 2048 MB Puntuación total: 100

#2341. 死胡同检测器

Estadísticas

您所在城镇的议会决定改善道路标志的设置,特别是针对死胡同的标志。他们为您提供了一张道路地图,您需要确定在何处设置标志以标记死胡同。他们希望您使用的标志数量尽可能少。

道路地图是由多个地点和连接它们的双向街道组成的集合。以下规则描述了如何获得死胡同标志的完整布局。考虑一条连接地点 $x$ 和另一个地点的街道 $S$。如果从 $x$ 进入 $S$ 后,在不进行掉头的情况下无法回到 $x$,则 $S$ 的 $x$ 端入口处应设置一个死胡同标志。掉头是指立即反转方向的 180 度转弯。

为了节省成本,您决定不安装冗余的死胡同标志,具体规则如下。考虑一条在 $x$ 端入口处设有死胡同标志的街道 $S$,以及另一条在 $y$ 端入口处设有死胡同标志的街道 $T$。如果从 $x$ 进入 $S$ 后,可以在不进行掉头的情况下到达 $y$ 并进入 $T$,则 $T$ 的 $y$ 端入口处的死胡同标志是冗余的。参见图 E.1 中的示例。

图 E.1:样例输入示意图,标出了非冗余死胡同标志的放置位置。

输入格式

输入的第一行包含两个整数 $n$ 和 $m$,其中 $n$ ($1 \le n \le 5 \cdot 10^5$) 是地点数量,$m$ ($0 \le m \le 5 \cdot 10^5$) 是街道数量。接下来的 $m$ 行,每行包含两个整数 $v$ 和 $w$ ($1 \le v < w \le n$),表示有一条连接地点 $v$ 和 $w$ 的双向街道。输入中所有的地点对都是唯一的。

输出格式

第一行输出 $k$,即安装的死胡同标志数量。接下来的 $k$ 行,每行输出两个整数 $v$ 和 $w$,表示应在连接地点 $v$ 和 $w$ 的街道的 $v$ 端入口处安装死胡同标志。描述死胡同标志的行必须按 $v$ 地点升序排序,若 $v$ 相同,则按 $w$ 地点升序排序。

样例

输入格式 1

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

输出格式 1

2
4 5
6 5

输入格式 2

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

输出格式 2

3
1 5
1 6
3 4

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.