#P8435. 【模板】点双连通分量(Vertex Biconnected Components)

0

【模板】点双连通分量(Vertex Biconnected Components)

【模板】点双连通分量(Vertex Biconnected Components)

题目描述

点双连通分量的定义是一个极大点双连通子图,而点双连通图的定义存在争议。

一种定义是“图中任意两不同点之间都有至少两条点不重复的路径”,而另外一种是“不存在割点的图”,这两种定义存在细微差别,这里采用后者。

对于一个 nn 个节点 mm 条无向边的图,请输出其点双连通分量的个数,并且输出每个点双连通分量。

输入格式

第一行,两个整数 nn 和 mm。

接下来 mm 行,每行两个整数 u,vu, v,表示一条无向边。

输出格式

第一行一个整数 xx 表示点双连通分量的个数。

接下来的 xx 行,每行第一个数 aa 表示该分量结点个数,然后 aa 个数,描述一个点双连通分量。

你可以以任意顺序输出点双连通分量与点双连通分量内的结点。

样例输入 #1

5 8
1 3
2 4
4 3
1 2
4 5
5 1
2 4
1 1

样例输出 #1

1
5 1 2 3 4 5

样例输入 #2

5 3
1 2
2 3
1 3

样例输出 #2

3
1 4
1 5
3 1 2 3

样例输入 #3

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

样例输出 #3

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

样例输入 #4

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

样例输出 #4

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

样例输入 #5

1 1
1 1

样例输出 #5

1
1 1

数据范围

样例四解释:

相同颜色的点为同一个分量里的结点。

温馨提示:请认真考虑孤立点与自环(样例五)的情况。


数据范围: 对于 100%100\% 的数据,1≤n≤5×1051 \le n \le 5 \times10 ^5,1≤m≤2×1061 \le m \le 2 \times 10^6。

subtask nn mm 分值
11 1≤n≤1001 \le n \le 100 1≤m≤5001 \le m \le 500 2525
22 1≤n≤50001 \le n \le 5000 1≤m≤5×1041 \le m \le 5 \times 10^4
33 1≤n≤2×1051 \le n \le 2\times 10^5 1≤m≤5×1051 \le m \le 5\times 10^5
44 1≤n≤5×1051 \le n \le 5 \times10 ^5 1≤m≤2×1061 \le m \le 2 \times 10^6

本题不卡常,时间限制与空间限制均已开大,正确的解法均可通过。

知识点与难度

本题涉及的知识点从属于 CSP-S,难度(CF Rating):1800。


测试点分布

Subtask 分值 测试点编号 说明
0 10 1~5 样例
1 20 6~10 小规模 n≤100,m≤500 / 特殊: 全孤立点+带自环孤立点 / 特殊: 菊花图所有边各自成点双
2 11~15 中等规模 n≤5000,m≤50000 / Hack: 多重边二元环与仙人掌图割点归属多个点双
3 25 16~21 大规模 n≤200000,m≤500000 深度长链迭代式Tarjan防爆栈测试
4 22~25 满规模 n=500000,m≤2000000 极限点双连通分量分解压力测试

出处:原题链接