#P12490. [OOI 2025] Strong Connectivity Strikes Back
[OOI 2025] Strong Connectivity Strikes Back
题目描述
有向图的顶点 和 被称为强连通的,如果存在一条从 到 的路径,并且存在一条从 到 的路径。注意,如果 和 强连通,且 和 强连通,那么 和 也强连通。因此,图中的顶点被划分为若干个强连通分量。属于同一个强连通分量的顶点彼此强连通(包括其本身),并且与任何不属于该分量的顶点都不强连通。
在一次图论课上,Alice 在黑板上画了一个包含 个顶点的有向图,并且高亮了图中的强连通分量。课间,Bob 决定恶作剧,他想删除图中一些边的方向,并且希望 Alice 能够根据剩下的边和课间的强连通分量划分,唯一地恢复这些被删除方向的边。
帮助 Bob 确定最大可以删除的边数,以及可以删除这些边的方案数。
更正式地说,找到一个边的子集 ,使得如果我们删除集合 中边的方向,则根据剩下的边的方向以及强连通分量的划分信息,可以唯一地恢复集合 中边的方向,从而保持图的强连通分量不变。并且,求出这个子集 的最大大小,以及这个子集的方案数。
由于这样的方案数可能非常大,输出该数对 取模的结果。
如果正确计算了最大子集的大小,但方案数计算错误,则将获得部分分数。
输入格式
第一行包含三个整数 、 和 (,,)—— 图中的顶点数、边数以及测试组编号。
接下来 行,每行包含两个整数 和 (,)—— 第 条边的起点和终点。
保证对于任意的 , 且 ,即任意两点之间最多有一条边,无论方向如何。
输出格式
输出两行。
第一行输出一个整数——可以删除的最大边子集的大小。
第二行输出一个整数——该子集的方案数对 取模的结果。如果你不想输出方案数,则在第二行输出任意一个从 到 之间的数字。若第二行没有输出正确的数字,则无论子集大小是否正确,都会被判定为“错误答案”,并且该测试得分为零。
输入输出样例 #1
输入 #1
5 6 0
1 2
1 5
2 3
3 4
3 5
4 2
输出 #1
3
3
说明/提示
样例解释
在这个样例中,图的强连通分量如下图所示:
可以删除虚线边的方向。实际上,边 不能反向,因为如果反向,顶点 、、、 将属于同一个强连通分量。同样,边 和 也不能反向,因为这样 、、 将不属于同一个强连通分量。
现在,考虑一个错误的子集选择方式:
这里,虚线加粗边的方向不能删除。例如,如果我们将边 和 的方向反向,得到的图依然会有相同的强连通分量划分。
可以证明,有 条边的方向不能删除,因此正确答案是 。
评分
本题的测试点共包含七个分组。分组的分数规则如下:
如果正确计算了最大边子集的大小和该子集的方案数,并且在该分组的所有测试点中都正确,用户将获得该分组的满分。
如果正确计算了最大子集的大小,但方案数计算错误,则将为该分组获得部分分数。此时,依赖该分组的分组也将进行测试,并且可能获得满分。
组别 | 部分分数 | 满分分数 | 限制条件: | 限制条件: | 依赖组别 | 说明 |
---|---|---|---|---|---|---|
0 | -- | 样例测试点。 | ||||
1 | 7 | 11 | 0 | |||
2 | 5 | 9 | 0, 1 | |||
3 | 8 | 12 | -- | -- | 满足 ,对于所有 ,存在一条边 。 | |
4 | 13 | 3 | 满足 。 | |||
5 | 12 | 20 | -- | 对于所有 ,存在一条边 ,且存在一条边 。 | ||
6 | 13 | 21 | 5 | 图是一个强连通分量。 | ||
7 | 8 | 14 | 0 -- 6 |