题意
给定一张 n n n 个点 m m m 条边的有向图,显然有向图的邻接矩阵 A A A 是一个 n n n 阶的布尔矩阵。
可以发现这个邻接矩阵的幂的序列具有一定的周期性(注:计算幂时要用布尔运算,即乘法为与,加法为或)。
求这个序列的周期
d
d
d 。但是在某些时候还需要求满足等式
A
k
=
A
k
+
d
A^k = A^{k+d}
Ak=Ak+d 的正整数
k
k
k 的最小值。当然,这两个数可能会很大,所以只需要求其对
1
0
9
+
7
10^9+7
109+7 取模后的余数。
有 10 % 10\% 10% 的数据: n ≤ 50 , m ≤ 1200 , t y ≠ 1 n \le 50,m \le 1200,ty \neq 1 n≤50,m≤1200,ty=1;
又有 20 % 20\% 20% 的数据: n ≤ 50 , m ≤ 1200 , t y = 1 n \le 50,m \le 1200,ty = 1 n≤50,m≤1200,ty=1;
又有 30 % 30\% 30% 的数据: n ≤ 200 , m ≤ 3000 , t y = 1 n \le 200,m \le 3000,ty = 1 n≤200,m≤3000,ty=1;
最后有 40 % 40\% 40% 的数据: n ≤ 1 0 5 , m ≤ 2 × 1 0 5 , t y ≠ 1 n \le 10^5,m \le 2 \times 10^5,ty \neq 1 n≤105,m≤2×105,ty=1。
题解
直接在矩阵上不好做,考虑其意义: A k A^{k} Ak即为一个点走 k k k步能否到达另一个点。
考虑其周期性,对于图这样比较复杂的结构,先从特殊情况考虑:如果它是一个DAG,那么在 k k k很大时整个矩阵都是 0 0 0,周期为 1 1 1。再考虑在上面加边形成环:只有一个环,周期即为这个环的长度;如果若干环是互相独立的(即不相交),那么周期即为这些环长的 l c m lcm lcm。
对于相交的环之间的影响,容易想到考虑每个强联通分量:里面的点可以经过这个强连通分量中的若干环互相到达。对于两个互质的环,则在 k k k足够大时,可以使每个 k k k的矩阵内这些强连通分量的点之间都为 1 1 1(用 e x g c d exgcd exgcd可证)。拓展一下可推得对两个环,周期为它们长度的 g c d gcd gcd。于是对每个强连通分量内的所有环长求 g c d gcd gcd,对两类之间求 l c m lcm lcm即为周期 d d d。
对于最小的 k k k,因为其满足单调性,直接倍增判断即可。