#P12805. 统计强连通
统计强连通
统计强连通
Problem Description
给定一张 简单有向图 包含编号为 的点。此图包含 条边,编号为 ,其中第 ()条边为 。 定义有向图 是一张包含两个编号分别为 的点与一条边 的图。对于整数 (),定义有向图 是将 中的每一条边使用 同时替换所得到的图(可见 样例解释 中的参考图)。替换时将 中的每一条边的起点视为 中编号为 的点,终点视为 中编号为 的点。 具体地,对于正整数 ,按下面的方式构造有向图 :
- 首先使 中包含与 相同数目的点,并给它们分配与 相同的编号。此时 中不包含任何边。
- 对于 中的每条有向边,轮流执行一次添加操作。
- 给 中的点重新分配连续正整数编号。 一次对 中的有向边 的添加操作如下:
- 在 中加入 个新点,并按照图 的方式在这 个新点之间连接 条有向边。设这 个新点中,与图 中编号为 的点对应的点的编号分别是 。
- 在 中找到编号为 的点。合并编号为 的点、编号为 的点。合并编号为 的点时,把所有形如 的边修改为 ,把所有形如 的边修改为 。由于不可能出现 与 ,所以不需要考虑。允许出现重边。 如果你还是不理解这个过程,可以参考 样例解释 的伪代码。 给定图 和非负整数 ,计算 中的强连通分量的个数。对 取模。
Input
本题包含多组测试数据。 首先在第一行输入一个整数 ()表示测试数据组数。 对于每一组测试数据,输入包含 行。 第一行包含三个整数 (,,,),分别表示 中点与边的数量,以及与计算答案有关的参数。 接下来 行,第 ()行包含两个整数 ()表示一条 中的边 。 保证输入的点与边构成一张简单有向图。(即无重边与自环)
Output
对于每一组测试数据,输出包含一行一个整数表示 中强连通分量个数对 取模后的值。
Sample Input
3
3 3 1919810
1 2
2 3
3 1
5 5 2
1 5
1 3
3 4
4 2
2 3
4 4 5
1 3
2 3
3 4
4 3
Sample Output
1
8
428
Hint
在样例的第二组测试数据中,将 中的每一条边使用 同时替换的过程如下图所示(其中黑色虚线边表示 中的边 ,这条边仅作指示作用,在 中不存在,
仅一部分图中绘制了黑色虚线边
):
答案为 。
在这里给出伪代码,伪代码以图 和整数 作为输入,返回图 :
Source
2025“钉耙编程”中国大学生算法设计暑期联赛(4)