DTOJ 4671. graph

题意

给定一张 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 n50m1200ty=1

又有 20 % 20\% 20% 的数据: n ≤ 50 , m ≤ 1200 , t y = 1 n \le 50,m \le 1200,ty = 1 n50m1200ty=1

又有 30 % 30\% 30% 的数据: n ≤ 200 , m ≤ 3000 , t y = 1 n \le 200,m \le 3000,ty = 1 n200m3000ty=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 n105m2×105ty=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,因为其满足单调性,直接倍增判断即可。

你可能感兴趣的:(#,联通分量,#,整除/同余)