省选05. 线性代数

P6772 [NOI2020] 美食家

先假设没有美食节,容易得到一个矩阵优化的 dp。

加上美食节过后分成 k 段考虑,每段分别矩阵快速幂,时间复杂度为 O((5n)3klogT)

这并不能通过本题。

可以思考快速幂优化乘法的本质,预处理出转移矩阵的 2 的幂。

原本快速幂是将一堆 5n×5n 的矩阵乘起来,最后再乘一个 1×5n 的矩阵,每一段的时间复杂度达到 O((5n)3logT)

可以考虑使用结合律交换顺序,每一段分别用 1×5n 的矩阵乘一堆 5n×5n 的矩阵,这样复杂度降为 O((5n)2logT)

因此总复杂度降为 O((5n)3logT+(5n)2klogT)

CF113D Museum

f(u,v)(uv) 表示分别从 uv 出发,在 s 相遇的概率。

deg(u) 表示 u 的度数。

假设从 (u,v) 走一条边到 (i,j)

f(u,v)=p(u)p(v)f(u,v)+iuf(i,v)1p(u)deg(u)p(v)+jvf(u,j)1p(v)p(u)deg(v)+iujvf(i,j)(1p(u))(1p(v))deg(u)deg(v)

移项得

(1p(u)p(v))f(u,v)iuf(i,v)1p(u)deg(u)p(v)jvf(u,j)1p(v)deg(v)p(u)iujvf(i,j)(1p(u))(1p(v))deg(u)deg(v)=0

可以发现 f(s,s)=1,对于不等于 sif(i,i)=0

因此,这 n2n 个方程每个右边都是一堆关于 f(i,i) 的线性组合。

左边有 n2n 个未知数,右边有 n 个参数,对于左边高斯消元即可。

注意特判起点相同的情况。

P2973 [USACO10HOL]Driving Out the Piggies G

对于需要使用高斯消元解决的 dp 问题,必须保证边界值好确定。

f(u) 表示经过 u 点的期望次数。

f(u)=[u=1]+uvf(v)1pqdeg(v)

最后,i 点的答案为 f(i)pq

CF24D Broken robot

f(i,j) 表示从 (i,j) 开始走,走到第 n 行的期望步数。

f(n,i)=0

枚举 (i,j) 可能走到哪里,设走到 (x,y) 的概率为 p,答案为

f(i,j)=1+x,yf(x,y)p

直接高斯消元复杂度是 O(n6)

但是由于不能往上走,因此可以一行一行地高斯消元,复杂度变为 O(n4)

再仔细观察矩阵发现系数都在主对角线附近,因此可以做到 O(n2)

UVA12177 First Knight

f(i,j) 表示从 (i,j) 走到 (n,m) 的期望步数。

dp(n,m)=0

f(i,j)=1+x,yf(x,y)p((x,y)(i,j))

暴力高斯消元复杂度为 O(n3m3)

将坐标建立与编号的映射 (i,j)(ni)m+mj+1

可以考虑只保留上三角矩阵,即消掉下三角矩阵。

对于一个未知数 i,只需要遍历 (i,i)(i+m,i+2m) 的矩阵就行了,时间复杂度优化为 O(nm3)

P7016 [CERC2013]Captain Obvious and the Rabbit-Man

构造多项式

A(x)=(xF1)(xF2)(xFk)=xk+b1xk1+b2xk2++bk

A(Fi)=Fik+b1Fik1+b2Fik2++bk=0

i=1k 求和

i=1kA(Fi)=i=1kFik+b1i=1kFik1+b2i=1kFik2++bk1i=1kFi+bkk=0

发现这样似乎没法用到题目给出的 pi,于是可以考虑先对 A(Fi)ai 再求和

i=1kA(Fi)ai=i=1kFikai+b1i=1kFik1ai+b2i=1kFik2ai++bk1i=1kFiai+bki=1kai=0

i=1kA(Fi)ai=pk+b1pk1+b2pk2++bk1p1+bki=1kai=0

推到这里还是推不动,再在前面求和之前乘个 Fi

i=1kA(Fi)aiFi=pk+1+b1pk+b2pk1++bkp1=0

于是

pk+1=i=1kbipki+1

O(k2) 解出 bi,即可计算答案。

CF963E Circles of Waiting

f(x,y) 表示从 (x,y) 出发,走到距离大于 R 的点的期望步数。

如果 x2+y2>R2f(x,y)=0

f(x,y)=1+f(x1,y)p1+f(x,y1)p2+f(x+1,y)p3+f(x,y+1)p4

暴力高斯消元时间复杂度为 O(n6)

考虑使用主元法。

将纵坐标从上到下,横坐标从左到右依次编号,取每个纵坐标最左边的横坐标为主元。

f(x+1,y)=f(x,y)f(x1,y)p1f(x,y1)p2f(x,y+1)p41p3

可以达到 O(n3)

P3211 [HNOI2011]XOR和路径

按位处理。

f(u) 表示从 u 出发到 n,这一位的异或和为 1 的概率。

f(u)=uv[w=0]f(v)+[w=1](1f(v))deg(u)

注意判断自环,自环的边只能连一次。

CF895C Square Subsets

完全平方数只与质因子的奇偶有关,小于等于 70 的质数只有 19 个,因此可以把每个数分解质因数后用二进制表示。

两个数想成等价于异或,原问题等价于异或和为 0 的真子集数。

假设线性基插入的元素个数为 cnt,那么答案为 2ncnt1(线性基的基底异或一定不为 0)。

P4869 albus就是要第一个出场

对于一个已经确定的线性基,新加入一个能被基底表示的数,会使得所有能被表示的数统一乘 2

于是问题就转化为查询一个数在线性基中的排名。

P5607 [Ynoi2013] 无力回天 NOI2017

很明显是线段树 + 线性基。

但线性基无法下传标记,于是考虑差分。

ai1bi=ai,每次只需要支持单点修改即可。

可以发现 alr 组成的线性基与,albl+1r 组成的线性基相同(考虑 ai 的定义来证明)。

于是这道题可以在 O(nlognlog2V) 解决。

CF845G Shortest Path Problem?

图中的环可以任意添加,于是可以把所有环加入线性基中。

其实 1n 的路径也可以任意选择,因为如果存在一条更优的路径,它会与原路径成环,一定会被加入线性基中。

CF1299D Around the World

发现边权值只达到 31,爆搜发现线性基的种类只有 374

考虑先将 1 连出去边删掉,可以得到很多连通块,沿用 CF845G 的方法,把每个连通块的环加入线性基中,如果存在一个环的权值不能加入线性基中,那么这个连通块一定不能与 1 相连。

因为不存在长度大于 3 的简单环,因此 1 向这些连通块要么连一条边,要么连两条边。

dp(i,j) 表示前 i 的连通块中,线性基为 j 的方案数,分类转移即可。

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