当我看到这道题的时候,我就感觉它和魔法值特别像,所以没做过的可以去做做,说不定会有什么新的发现。
Solution:矩阵快速幂
看见 (n) 的范围是 (1leq nleq 50) ,不难想到这道题要用到邻接矩阵。
然后就可以用矩阵快速幂做这个题。构造一个 (n imes n) 的矩阵, (G_{i,j}) 代表 (i ightarrow j) 有是否一条有向边,有的话存储的则是 (i) 的出度的逆元,那么 (G) 就是我们的转移矩阵。把 (F) 一个 (1 imes n) 的列向量作为初始矩阵,只存储 (a_i) 。此时复杂度为 (O(qn^3log t)) 。
如果加上倍增预处理 (G^{2^i}) ,复杂度可降为 (O(n^3log t+qn^2log t)) 。
但此时的复杂度在脸黑的情况下还是过不了的,我们还需要优化,可以考虑将倍增中的二进制预处理改为更大的进制,设为 (z) 进制,则此时复杂度为 (O(n^3log_z t+qn^2log_z t)) 就可以过了
(还有一些优化是优化常数,在这里不提了)
注意:因为会流向自己,所以 (i ightarrow i) 也相当于有一条有向边,即在矩阵中也要转移