#P9161. 强连通分量(Strongly Connected Components)

强连通分量(Strongly Connected Components)

强连通分量(Strongly Connected Components)

问题描述

给定一个含 N N 个顶点、M M 条边的有向图(可能含重边,但题目未禁止;约束仅要求 aibi a_i \ne b_i ,未禁重边,故按一般处理)。
请将该图分解为强连通分量(SCC),并按拓扑序输出各 SCC。

约束条件

  • 1N500000 1 \leq N \leq 500\,000
  • 1M500000 1 \leq M \leq 500\,000
  • 0ai,bi<N 0 \leq a_i, b_i < N
  • aibi a_i \ne b_i

输入格式

N MN\ M
a0 b0a_0\ b_0
a1 b1a_1\ b_1
:
aM1 bM1a_{M-1}\ b_{M-1}

输出格式

KK
l0 v0,0 v0,1  v0,l01l_0\ v_{0,0}\ v_{0,1}\ \dots\ v_{0,l_0-1}
l1 v1,0 v1,1  v1,l11l_1\ v_{1,0}\ v_{1,1}\ \dots\ v_{1,l_1-1}
:
lK1 vK1,0  vK1,lK11l_{K-1}\ v_{K-1,0}\ \dots\ v_{K-1,l_{K-1}-1}

其中:

  • K K 为 SCC 的数量;
  • 每行第一个数 l l 是该 SCC 的顶点数;
  • 后续 l l 个数是该 SCC 中的顶点编号(顺序任意);
  • 所有 SCC 按拓扑序排列:若存在从 SCC A A 到 SCC B B 的边,则 A A 出现在 B B 之前。

注:题目说明“若有多个解,输出任意一个”,故拓扑序不唯一时任选其一即可。

6 7
1 4
5 2
3 0
5 5
4 1
0 3
4 2
4
1 5
2 4 1
1 2
2 3 0