P5107 能量采集

当我看到这道题的时候,我就感觉它和魔法值特别像,所以没做过的可以去做做,说不定会有什么新的发现。

Solution:矩阵快速幂

看见 \(n\) 的范围是 \(1\leq n\leq 50\) ,不难想到这道题要用到邻接矩阵。

然后就可以用矩阵快速幂做这个题。构造一个 \(n\times n\) 的矩阵, \(G_{i,j}\) 代表 \(i\rightarrow j\) 有是否一条有向边,有的话存储的则是 \(i\) 的出度的逆元,那么 \(G\) 就是我们的转移矩阵。把 \(F\) 一个 \(1\times n\) 的列向量作为初始矩阵,只存储 \(a_i\) 。此时复杂度为 \(O(qn^3\log t)\)

如果加上倍增预处理 \(G^{2^i}\) ,复杂度可降为 \(O(n^3\log t+qn^2\log t)\)

但此时的复杂度在脸黑的情况下还是过不了的,我们还需要优化,可以考虑将倍增中的二进制预处理改为更大的进制,设为 \(z\) 进制,则此时复杂度为 \(O(n^3\log_z t+qn^2\log_z t)\) 就可以过了

(还有一些优化是优化常数,在这里不提了)

注意:因为会流向自己,所以 \(i\rightarrow i\) 也相当于有一条有向边,即在矩阵中也要转移

posted @ 2020-08-30 08:09  jasony_sam  阅读(132)  评论(0编辑  收藏  举报