图中长度为k的路径的计数
给定一个 n n n个顶点,边长为 1 1 1的有向图的邻接矩阵。求出这个图里长度为 k k k的路径的总数。路径中同一条边允许通过多次。 ( 1 ≤ n ≤ 100 , 1 ≤ 1 0 9 ) (1 \leq n \leq 100,1\leq10^9) (1≤n≤100,1≤109)
输入
n = 4
k = 2
输出
6
题解
假设从
u
u
u出发,到
v
v
v的路径的总数为
G
k
[
u
]
[
v
]
G_k[u][v]
Gk[u][v]。首先,
k
=
1
k=1
k=1时的值和边数相等,因此
G
1
G_1
G1就等于图的邻接矩阵。假设我们已经得到了
G
k
1
[
u
]
[
w
]
×
G
k
2
[
w
]
[
v
]
G_{k_{1}}[u][w]\times G_{k_{2}}[w][v]
Gk1[u][w]×Gk2[w][v]
表示成矩阵的积的形式即为
G
k
1
+
k
2
=
G
k
1
G
k
2
G_{k_1+k_2}=G_{k_{1}}G_{k_{2}}
Gk1+k2=Gk1Gk2
因此,可以使用矩阵的幂表示出
G
k
=
G
1
k
G_k=G_{1}^{k}
Gk=G1k
这个算法的复杂度为
O
(
n
3
l
o
g
k
)
O(n^3 log k)
O(n3logk)