问题 I: 统计强连通

内存限制:263 MB 时间限制:4 S
题面:传统 评测方式:文本比较 上传者:
提交:1 通过:1

题目描述

给定一张 简单有向图 GG 包含编号为 1,2,3,⋯,n1,2,3,,n 的点。此图包含 mm 条边,编号为 1,2,3,⋯,m1,2,3,,m,其中第 ii1≤i≤m1im)条边为 ui→viuivi

定义有向图 G0G0 是一张包含两个编号分别为 1,21,2 的点与一条边 1→212 的图。对于整数 kkk≥1k1),定义有向图 GkGk 是将 Gk−1Gk1 中的每一条边使用 GG 同时替换所得到的图(可见 样例解释 中的参考图)。替换时将 Gk−1Gk1 中的每一条边的起点视为 GG 中编号为 11 的点,终点视为 GG 中编号为 22 的点。

具体地,对于正整数 kk,按下面的方式构造有向图 GkGk

  1. 首先使 GkGk 中包含与 Gk−1Gk1 相同数目的点,并给它们分配与 Gk−1Gk1 相同的编号。此时 GkGk 中不包含任何边。
  2. 对于 Gk−1Gk1 中的每条有向边,轮流执行一次添加操作。
  3. 给 GkGk 中的点重新分配连续正整数编号。

一次对 Gk−1Gk1 中的有向边 u→vuv 的添加操作如下:

  1. 在 GkGk 中加入 nn 个新点,并按照图 GG 的方式在这 nn 个新点之间连接 mm 条有向边。设这 nn 个新点中,与图 GG 中编号为 1,21,2 的点对应的点的编号分别是 x,yx,y
  2. 在 GkGk 中找到编号为 u,vu,v 的点。合并编号为 u,xu,x 的点、编号为 v,yv,y 的点。合并编号为 a,ba,b 的点时,把所有形如 b→γbγ 的边修改为 a→γaγ,把所有形如 γ→bγb 的边修改为 γ→aγa。由于不可能出现 a→bab 与 b→aba,所以不需要考虑。允许出现重边。

如果你还是不理解这个过程,可以参考 样例解释 的伪代码。

给定图 GG 和非负整数 k′k,计算 Gk′Gk 中的强连通分量的个数。对 10000000071000000007 取模。

输入格式

本题包含多组测试数据。

首先在第一行输入一个整数 TT1≤T≤1001T100)表示测试数据组数。

对于每一组测试数据,输入包含 m+1m+1 行。

第一行包含三个整数 n,m,k′n,m,k2≤n≤1052n1052≤∑n≤3×1052n3×1050≤m≤∑m≤1060mm1060≤k′≤10180k1018),分别表示 GG 中点与边的数量,以及与计算答案有关的参数。

接下来 mm 行,第 i+1i+11≤i≤m1im)行包含两个整数 ui,viui,vi1≤ui,vi≤n1ui,vin)表示一条 GG 中的边 ui→viuivi

保证输入的点与边构成一张简单有向图。(即无重边与自环)

输出格式

对于每一组测试数据,输出包含一行一个整数表示 Gk′Gk 中强连通分量个数对 10000000071000000007 取模后的值。

输入样例 复制

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

输出样例 复制

1
8
428

数据范围与提示

在样例的第二组测试数据中,将 G1G1 中的每一条边使用 GG 同时替换的过程如下图所示(其中黑色虚线边表示 G1G1 中的边 u′→v′uv,这条边仅作指示作用,在 G2G2 中不存在,仅一部分图中绘制了黑色虚线边):
figure

答案为 88

在这里给出伪代码,伪代码以图 GG 和整数 kk 作为输入,返回图 GkGk
figure

分类标签