#HK5357. 「OOI 2025 Day 2」强连通性反击

「OOI 2025 Day 2」强连通性反击

题目描述

题目译自 Open Olympiad in Informatics 2025 Day2 T1 「Сильная связность наносит ответный удар / Strong Connectivity Strikes Back

在有向图中,如果从顶点 uu 到顶点 vv 存在一条路径,同时从顶点 vv 到顶点 uu 也存在一条路径,则称顶点 uuvv 是强连通的。注意到,如果 uuvv 强连通,且 vvww 强连通,则 uuww 也是强连通的。因此,图的顶点可以被分成若干集合——强连通分量。属于某个强连通分量的顶点,与该分量内的所有顶点(包括自身)强连通,而与分量外的顶点不强连通。

在图论课上,爱丽丝在黑板上画了一个包含 nn 个顶点的有向图,并标注了其强连通分量。课间休息时,鲍勃决定捉弄爱丽丝,擦除图中某些边的方向。他希望在休息结束后,爱丽丝能够根据剩余的边和强连通分量的划分,唯一地恢复被擦除的方向。

请帮助鲍勃,计算出他最多可以在多少条边上擦除方向,以及有多少种方式可以做到这一点。

更形式化地,求图中边的子集 AA 的最大大小,使得满足以下性质:如果擦除子集 AA 中边的方向,则根据原来的强连通分量信息和未被擦除方向的边,可以唯一地恢复子集 AA 中边的方向,使得强连通分量保持不变。

由于最大子集的数量可能非常大,请输出其对 109+710^{9} + 7 取模的结果。

如果解决方案正确计算了最大子集 AA 的大小,但未能正确计算出这样的子集数量,将获得部分分数。

输入格式

第一行包含三个整数 n,m,gn, m, g $(2 \leq n \leq 2000, 1 \leq m \leq 2000, 0 \leq g \leq 7)$,分别表示图的顶点数、边数和子任务编号。

接下来的 mm 行,每行包含两个整数 uiu_iviv_i (1ui,vin,uivi)(1 \leq u_i, v_i \leq n, u_i \neq v_i),表示第 ii 条边的起点和终点顶点编号。

保证对于任意 1i,jn1 \leq i, j \leq n(ui,vi)(uj,vj)(u_i, v_i) \neq (u_j, v_j)(ui,vi)(vj,uj)(u_i, v_i) \neq (v_j, u_j),即任意两个顶点之间最多有一条边,不论方向如何。

输出格式

第一行输出一个整数,即可以擦除方向的最大边子集的大小。

第二行输出一个整数,即这样的最大子集数量对 109+710^{9} + 7 取模的结果。如果你不打算计算子集数量,可以在第二行输出任意一个 1-1109+610^{9} + 6 之间的数字,此时你的解决方案将获得部分分数。

注意,如果第二行没有输出任何数字,将导致「答案错误」判定,并在此测试点中得 00 分,即使子集大小正确也无济于事。

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

3
3

示例图中标注了强连通分量:

在用虚线标注的边上可以擦除方向。确实,边 (1,5)(1, 5) 不能反向,否则顶点 11223355 将处于同一强连通分量。边 (3,4)(3, 4)(4,2)(4, 2) 也不能反向,否则顶点 223344 将不再处于同一强连通分量。

以下是一个不正确的选择子集方式:

在此不能擦除用粗虚线标注的边的方向。例如,如果将边 (1,2)(1, 2)(1,5)(1, 5) 的方向反转,将得到一个具有相同强连通分量划分的图。

可以证明,无法在 44 条边上擦除方向,因此答案为 33

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 部分分数 满分 附加限制 子任务依赖 备注
11 77 1111 n14n \leq 14m14m \leq 14 00
22 55 99 n20n \leq 20m20m \leq 20 0,10, 1
33 88 1212 ui<viu_i < v_i,对于所有 1in11 \leq i \leq n-1,存在边 (i,i+1)(i, i+1)
44 88 1313 33 ui<viu_i < v_i
55 1212 2020 对于所有 1in11 \leq i \leq n-1,存在边 (i,i+1)(i, i+1),存在边 (n,1)(n, 1)
66 1313 2121 55 图由单个强连通分量组成
77 88 1414 060 \sim 6