矩阵快速幂与邻接矩阵trick
P2233
对于一个稠密图(\(n \leq 500\)),可以直接构造它的邻接矩阵 \(G\)。而利用该邻接矩阵可以直接求出任意两点 \(u, v\),从 \(u\) 到 \(v\) 经过恰好 \(k\) 条边的方案数:求出 \(G^{k}\) 即可,\(G[u][v]\) 即为所求。
证明:利用了 \(Floyd\) 原理:从 \(u\) 到 \(v\) 经过 \(k\) 条边,可以通过 \(u\) 到 \(w\) 经过 \(k-1\) 条边,再通过 \(w\) 到 \(v\) 经过 \(1\) 条边来递推求得,枚举所有可能的中转点 \(w\) 即可。表达式为:
\[G_{k}[u][v] = \sum_{w=1}^{n} G_{k-1}[u][w] * G_{1}[w][k]
\]
可以发现这恰好可通过 \(G^{k-1}*G\) 来得到,证毕。
对于本题,只需要按照题意构造出相应的邻接矩阵,然后矩阵快速幂即可。具体细节见代码。