把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

【Note】矩阵加速

感谢 tidongCrazy 倾情授课。


基本形式

fi=k1fia1+k2fia2++g(i)

把递推需要用到的项全部存进矩阵里面,固定的系数则放在转移矩阵里面。最后的那个g,其实可以认为是另外一个(或者多个)递推数列,它涉及了f的转移,于是一起放在矩阵里面,并且它也实时转移更新着。

比如转移项里面可以有3nn3n3n+1的转移只需要带个系数3,而nn+1的转移,我们需要多带一列1


基础习题

最简单的一维多阶递推。

P1962 斐波那契数列(例题)

P4838 P哥破解密码(矩阵加速)


稍微up

P1397 [NOI2013] 矩阵游戏(矩阵加速)

处理每一行递推到最后的矩阵,加一个从这一行末尾递推到下一行第一个位置的矩阵,对这个组合快速幂。

P3216 [HNOI2011]数学作业(矩阵加速)

fi=fi1×10T(i)+i

发现这个T(i)不好处理,看看n1018,直接跑18个不同的矩阵。


图论×矩阵

大致做法是这样的。在一个图里面跑,题目涉及的路径长度非常大的时候适用。

t1阶的答案扩展到t阶的答案,需要多扩展一条边。设fi,jt表示i>j,走t步的方案数。则

fi,jt=fi,kt1×fk,j1

跟矩乘的形式相符,可以以1阶矩阵为转移矩阵爆加速。

另一个理解则是,这个1阶的01矩阵是该图的邻接矩阵,当k>j有连边时,就能为fi,jt贡献fi,kt1的方案数。

P2233 [HNOI2002]公交车路线(图论与矩阵结合)

P2151 [SDOI2009] HH去散步(有限制的路径计数)

这个限制的做法是,把一条边拆成两个点(表示双向的边)。做完了(

P4159 [SCOI2009] 迷路(图论中邻接矩阵的巧妙转化)

这个边权最多只有9,那我们存储相邻9阶的信息到一个矩阵里。

...........等一下,这样能做么...

题解给的方法是把一条边暴拆成双向各九个,没了(


分组矩阵

矩阵变化的周期很小,把周期内的每个矩阵处理出来,合在一起快速幂就行了。

P2579 [ZJOI2005]沼泽鳄鱼(分组矩阵优化)

P3821 Isaac(分组矩阵优化)

相比上一题加个二分就好啦。


矩阵乘法变形

P5678 [GZOI2017]河神(矩阵乘法变形)

这俩运算符性质很好,看看下面矩阵乘法结合律的证明吧。

注意与运算的单位是111111111

CF576D Flights for Regular Customers(矩阵乘法优化)

di排序,每次跑到下一个di就加边改矩阵。

由于只需要可行性,可以改成01,位运算,然后bitset压一下。

怎么还有题需要bitset卡个64的

P6569 [NOI Online #3 提高组] 魔法值(矩阵乘法变形+优化)

关于矩阵乘法结合律的证明(sun123zxy)

image

与和或运算显然是满足的。

然后就是这题奇怪的优化,像我这种从来把log当作不存在的人就已经寄了。

光速幂

杂记

还可以做类似一个结构体内,一些变量相互加减之类变化的运算。

D - Binary Representations and Queries

第一步结论我甚至暂时不会证。

后一步则是让两个元素一一对应的集合(其实就是一对一对的),每次让一边元素加上另一边与之对应元素的值。

这个只是矩阵乘法,而不是矩阵加速(

P7453 [THUSCH2017] 大魔法师

又想提一嘴矩阵的运算律,我一直没搞得比较清楚。

矩阵运算律

矩阵线性运算

(1) 矩阵加法

交换律:A+B=B+A

结合律:(A+B)+C=A+(B+C)

(2) 矩阵数乘

结合律:λμA=λ(μA)

分配率 1λ(A+B)=λA+λB

分配率 2(λ+μ)A=λA+μA

矩阵乘法

结合律 1(AB)C=A(BC)

结合律 2λ(AB)=(λA)B=A(λB)

分配率:A(B+C)=AB+AC(B+C)A=BA+CA

这题是在线段树上做区间乘矩阵,区间覆盖,区间加,区间乘。后三个运算分别对矩阵不同对象。

满足了上述一系列优秀的性质,来考虑怎么打 tag

回归最一般的线段树区间乘与区间加。

比如标记 该节点需要先 ×a+b,子节点已有的标记是需要先 ×c+d,那么子节点:

E=(E×c+d)×a+b=E×(c×a)+d×a+b

那么子节点的 c 就该变成 c×ad 变成 d×a+b

类比标记打法:该节点需要 ×P 后分别 ×v ,+k , 覆盖

一种方法是拆成乘与加矩阵(3×3 矩阵),另一种是全部拆成乘矩阵。后者(4×4 矩阵,加了一列常数项)应该是好写很多的,但不知道会不会复杂度爆炸(

哦我草,5s 啊,那没事了,我傻逼了,比上面那个还好写(?)

posted @   Kan_kiz  阅读(123)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
历史上的今天:
2021-11-04 「HNOI2016」序列
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示