QOJ.ac

QOJ

Time Limit: 1 s Memory Limit: 64 MB Total points: 100

#12095. 无环分解

Statistics

Byteman 正在研究有向图。他特别喜欢不包含环的图,因为这类图中的许多问题都可以简单且高效地解决。现在,他正在尝试寻找一种将任意有向图表示为若干个无环图之和的方法。

对于给定的有向图,他试图找到一种将图的所有边划分为最少数目子集的方法,使得由这些边子集构成的图都不包含环。你能编写一个程序来解决 Byteman 的问题吗?

输入格式

标准输入的第一行包含两个整数 $n$ 和 $m$ ($1 \le n, m \le 100\,000$),分别表示图中顶点的数量和边的数量。顶点编号从 $1$ 到 $n$。接下来的 $m$ 行,每行包含一对整数 $a_{i}, b_{i}$ ($1 \le a_{i}, b_{i} \le n, a_{i} \neq b_{i}$),描述图中的一条边。该对整数表示一条从顶点 $a_{i}$ 指向顶点 $b_{i}$ 的有向边。你可以假设图中不包含重边。

输出格式

输出的第一行应包含一个整数 $k$,表示将图分解为无环图的最小数量。接下来的 $k$ 行,每行描述分解中的一个元素,首先输出一个整数 $l_{i}$,表示该元素中包含的边数。随后紧跟 $l_{i}$ 个递增的整数,表示属于该分解元素的边的编号。边的编号按照它们在输入中出现的顺序从 $1$ 到 $m$ 进行编号。每条边必须恰好出现在分解的一个元素中。

如果存在多种正确的解决方案,输出其中任意一种即可。

样例

输入 1

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

输出 1

2
2 3 5
3 1 2 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.