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

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

题目描述

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

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

在图论课上,爱丽丝在黑板上画了一个包含 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_i 和 viv_i (1≤ui,vi≤n,ui≠vi)(1 \leq u_i, v_i \leq n, u_i \neq v_i),表示第 ii 条边的起点和终点顶点编号。

保证对于任意 1≤i,j≤n1 \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-1 到 109+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) 不能反向,否则顶点 11、22、33 和 55 将处于同一强连通分量。边 (3,4)(3, 4) 和 (4,2)(4, 2) 也不能反向,否则顶点 22、33 和 44 将不再处于同一强连通分量。

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

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

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

数据范围与提示

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

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