省选集训—线性代数

省选集训—线性代数

我怎么这么渺小啊

link1

A BZOJ2396

判断矩阵乘法 AB=C 时,一个正确率极高的方法(基于Schwartz–Zippel引理):建立一个向量 v,判断 ABv 是否等于 Cv,那么可以当成 A(Bv) 计算。

B LOJ3409

很厉害的问题。

Task1:注意到 φ(3)=2,也就是说 x21(mod3),那么我们的想法就是让合法的选择方案权值为 1,非法的为零,那么会下意识构造平方。

详细地,我们将所有向量看作列向量并堆叠为一个矩阵 A,那么 |AAT| 即为所求。

考虑所有的选择方案 (nm),答案即为 |A[m]||A[m]T|=|AAT|。不满秩就是零,满秩由于平方就是 1。

Task2:注意到只关注答案奇偶性。

首先考虑选出一个满秩的子式,然后再判断这些子式是否取遍所有颜色,这两个都可以使用行列式判断。

也即构造矩阵 Ci,j=[coli=j],那么答案就是 |A[m]||C[m]|=|AC|

C NOI2021 路径交点

唐题。首先注意到路径交点就是逆序对个数,其次注意到需要求带符号和,因此我们通过简单 dp 处理出 LGV 引理的 M 矩阵,求其行列式即可。

D ABC216H

注意到如果可以枚举终点位置,那么也是一个显然的 LGV。

注意到萝卜(robot)很少,且移动方式单调(定起点终点,那就是组合数),因此考虑使用 dp 计算每个 LGV 的局面和。

先拿出 2nk,然后便可以设计状压 fS,i 为当前已经处理了终点在 [1,i] 的所有萝卜,已经放了 S 的萝布进去,简单讨论下逆序对转移即可。

E [PA 2021]Fiolki 2

给定 DAG,以 [1,k] 为起点,对于每个 x:0k,求出有多少个区间 [l,r],所有终点在这里面,选出的点不相交路径个数最多为 x

注意到 k 很小,且使用 LGV 引理表达后,本质上是计算选出的不相交路径个数,等价于选出一个最大的线性无关方阵,也就等价于选出最大线性无关向量组,也就是矩阵的秩。

可以先使用 DP 求出 LGV 最终的矩阵 M,我们相当于是只能取其若干的连续的列。

这很简单,固定 r,所有的 l 被分为不超过 k 段,使用时间标记的线性基可以轻松维护并暴力统计答案。

F 摆

先对这个矩阵做一些初等变换

[10000C1C0CCC1CCCCC1CCCCC1][10000C11C0C0C11CC000C11C0000C11C]

在做了定义 Ai,j=Ai,jAi1,j 后,可以看到,矩阵主要有值的元素只剩下了三对角线。

尝试考虑去分析一下对于一个都有值的排列 p,其 i=1nAi,pi 是个什么样子。发现若现在 Ai,j0 不能够 (i1,j),(i,j) 同时 otherwise,也不能够 (i1)i|j

因此如果我们将置换环拿出来,走到右上角矩阵是特殊的(这时候权值为 C),因此我们的置换环会由若干编号连续的段拼凑起来。

先把所有权值除掉 1C,尽可能将对角线化为 1(最终答案记得乘)。

不妨设 fi 为考虑左上角 i×i 矩阵的行列式,根据讨论走到 ii 列上的点可以得到:

fi=fi1+C1Cd<i,d|ifdfd1

f1=1,ans=fn(1C)n1

考虑其差分数组 g 来化简形式,我们需要快速求其前缀和(注意到 g 并非积性函数,这启发我们使用杜教筛)

gn=11Cd<n,d|ngdgn11Cd<n,d|ngd=0d|ngdhnd=[n=1]

h1=1,hi=11C,i>1

因此有:

i=1n(gh)i=i=1n(j|igjhij)=i=1nhifni=[n1]fn=[n1]i=2nhifni

计算即可,注意预处理一部分的 f 值加速。

G 仙人掌

注意到这个排列 p 里的置换环,要么是二元环(对应仙人掌一条边),要么是一整个环,对应仙人掌上的一个环。

然后考虑逆序对奇偶性等价于 szi1 的奇偶性,那么也就是奇正偶负,同时 sz3 的环存在顺逆时针两种遍历方式,因此对方案数整体贡献是 2

也就是一个置换环组成的图,对应的排列的权值之和是:2[szi3](1)szi1

因此可以在圆方树上 DP 了,不妨设 fu,0/1 表示这个点(方点为其圆方树上的父亲)是否已经在子树内使用了。

对于圆点,简单合并,对于方点,简单讨论是否取,以及取的话顺逆时针的问题,以及整个环全部取的情况即可。

H C

注意到我们可以根据判断积和式是否为零判断是否有方案的 and 和 and kk,但是这是一个补集的关系,并不充分。

考虑随机赋权,并对于每个 k 只加入 k 为边权子集的边,求行列式,并使用高维差分去掉这个补集关系。

由于操作始终只是简单的加减操作,最终本质上每个 k 得到的是一个 m 元多项式表达方案,根据 Schwartz–Zippel引理 正确率极高。

(事实上还有一种理解是将高维差分的过程直接带进行列式计算)

I huawei

f(x,y) 为答案,显然有:

f(x,y)=pf(x1,y)+qf(x,y1)+1=pf(x1,y)+1+q[pf(x1,y1)+qf(x,y2)+1]=k=0m1pqkf(x1,(yk+m)modm)+k=0m1qk+qmf(x,ym+m)(1qm)f(x,y)=1qm1q+k=0m1pqkf(x1,(yk+m)modm)f(x,y)=1p+k=0m1pqk1qmf(x1,(yk+m)modm)

可以发现,设 h(z)=i=0m1zip,g(z)=i=0m1pqk1qm,fx(z)=i=0m1f(x,i)zi

则有 fx(z)=fx1(z)×g(z)+h(z)(循环卷积意义下)

循环卷积的所有运算类似于线性卷积,可以看作是在做线性卷积,但是对于最终答案,每个同余位置作用相同,而因为分配率因此成立

并且通过运算,我们可以发现 h(z)×g(z)=h(z)

因此考虑用 f0(z) 来表示其余的 f,事实上有:

ft(z)=f0(z)gt(z)+th(z)

可以考虑预处理 g2i(z) 的结果,做类似快速幂的运算。

好了,现在我们只剩下 f0(z) 的求解了。

考虑到 fn1(z)=f0(z)gn1(z)+(n1)h(z)f(0,y)=pf(n1,y)+qf(0,y1)+1

这足以使用高斯消元解出 f0(z)

或许会问,为什么不直接 fn(z)=f0(z)=f0(z)gn(z)+nh(z)

因为 f(0,0) 是已知项,我们并不能够直接让其与之联立而应单独钦定

link2

A JSOI2010巨额奖金

最小生成树计数,按照最小生成树的流程,在加入边权相同的边时全部拿出来,对于加入完所有边后在同一个连通块的边再拿出来,单独缩点(重标号)后跑矩阵树定理即可

B 「THUPC 2019」找树

首先最优性线性代数方面除了秩不存在,因此考虑计数

注意到FWT的实质,我们可以在对当前这个二进制位做FWT时直接运用相应的运算规则,这是因为每一位独立,最后IFWT回来。

然后考虑应用矩阵树定理,但是我们并不知道如何维护一个集合幂级数的加减消元,但是注意到FWT后每一位独立,因此对每一位单独求行列式作为最终的值,将这个值组成的序列做 IFWT 就是答案了。

C 「联合省选 2020 A」作业题

首先 gcd 比较迷,我们可以使用容斥的操作(莫比乌斯反演和从大到小容斥都可以),考虑只求出 fd=gcd|d 时所有生成树的边权和。

注意到矩阵树定理的带权形式求的是生成树边权乘积的和,这与该问题不同,但是有套路:我们在矩阵里每个元素作为函数 ax+b(modx2),那么这个函数的加减,逆元,消元都是可以做的,我们最终只关心一次项系数,提取即可。

需要注意当一列 b 都是零时只对 a 消,不能求逆。

D 重建

首先将概率为一的单独处理并将连通块缩点,然后就变成了生成树计数,然后一个方案的权值是选出的边的选出概率乘上未选出的边的未选出概率,我们不妨最后乘上所有边的未选出概率,并将边权设为选出概率除以未选出概率,这样做矩阵树即可。

E 「PA 2022」Drzewa rozpinające

需要知道矩阵行列式引理。

考虑矩阵树定理 |DG|,其中 D 是容易求的,但是 G 并不容易。

注意到我们可以不用管 ij 的限制,因为会减掉。

而我们知道 gcd(ai,aj)=d|ai,d|ajφ(d)

那么 G 可以写作两个矩阵的积:

G=UV,其中 Ui,j=[j|ai]φ(j),Vi,j=[i|aj]

那么根据矩阵行列式引理,设 m 为值域,有 |DG|=|D||Im+VD1U|

注意到 |D| 容易求出,而 Im+VD1U,写出其具体系数,显然若其 (i,j) 有值需要满足 lcm(i,j)m,因此矩阵相当稀松,尤其是自下往上。

那么我们自下往上消元,只遍历有值的位置即可通过。复杂度玄学。

F 破烂森林

根据矩阵树定理的组合证明,以及本题基环树的特殊情境(n 条边),考虑容斥方案时,容斥系数只需要设为偶环个数奇偶性,而这恰好就是逆序对奇偶性,因此答案就是 |Dout+G|

G

有些麻烦,先咕着

H SNCPC2024 最大流

首先边转点,又变成了 LGV 的经典形式。

考虑答案对 kmin,我们对于每个点维护 k 维空间的线性基,只需要求线性基的大小即可。

朴素地是将所有出边和入边作为起终点,并给每条边随机赋权然后算权值算矩阵秩。

注意到随机的性质,随机的随机组合还是随机,因此将 1 的邻接点作为起点,并给其一个随机的向量,接着考虑转移。

我们以 u 的所有入边为终点,这个入边的向量如何表示?它可以表示为另一个端点的向量的线性组合(只能有一个,因为边不交)。我们将其线性基里的向量随机线性组合并插入到 u 的线性基中即可。

最终每个点的线性基大小即为答案。

正确率基于Schwartz–Zippel引理。

posted @   spdarkle  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示