给定一个 \(n\) 个节点的有向图,连接 \((i, j)\) 的有向边边权为 \(c_{i, j}(0 为没有边)\),问有多少种从 \(1\) 到 \(n\) 的方式使得经过的边边权之和为 \(k\)。
\(n \le 10, c \le 9, k \le 10^9\)。
如果 \(c\) 只有 \(0 / 1\),那么对邻接矩阵做矩阵快速幂即可。
现在 \(c\) 来到 \(0\sim 9\),可以将每个点拆成 \(9\) 个点 \(a_{i, 0} \sim a_{i, 8}\),\(a_{i, j}, a_{i, j + 1}\) 连边,\(a_{i + c_{i, j} - 1}, a_{j, 0}\) 连边,这样 \(c\) 只有 \(0/1\) 了,做矩乘即可。
时间复杂度:\(O((nc)^3\log k)\)。
从 \(c = 0\sim 9\) 推到 \(0 / 1\),运用了拆点的方式.