矩阵树定理 记录

news/2025/1/19 15:19:29/文章来源:https://www.cnblogs.com/dcytrl/p/18443269

矩阵树定理这玩意背一次忘一次,还是写一发吧。

前置知识:行列式求值

给定一个矩阵,定义一个 \(n\) 阶矩阵 \(A\) 的行列式为 \(\det A=\sum_{p} (-1)^{\pi(p)} \prod a_{i,p_i}\),其中 \(p\) 为一个 \([1,n]\) 的排列,\(\pi(p)\) 为排列 \(p\) 的逆序对数。

行列式中行和列是等价的,以下对行描述的定理对列也同样成立。

行列式的性质一大堆,这里只介绍跟 \(O(n^3)\) 求解行列式用到的性质。

定理 1:将第 \(j\) 行的所有元素乘 \(k\) 的结果加到第 \(i\) 行的对应元素上,行列式不变。

证明:忘了

定理 2:交换矩阵的任意两行,行列式的符号发生改变。

证明:这相当于在原基础上交换了 \(p_i,p_j\),由于交换排列的任意两个元素,排列逆序对数的奇偶性发生改变,那么 \((-1)^{\pi(p)}\) 的符号也发生改变。

定理 3:上三角矩阵、下三角矩阵、对角矩阵的行列式等于主对角线上所有元素的乘积。

证明:对于这三个矩阵,只有当 \(p_i=i\)\(a_{i,p_i}\) 才可能对答案有贡献,其他排列一定会乘上一个零导致必然没贡献。

根据以上三个定理,我们可以通过高斯消元把矩阵化成上三角矩阵(这其实就是高斯消元在干的事……),于是就能在 \(O(n^3)\) 的复杂度内求出行列式。

一个小细节:高斯消元的时候若需要求模意义下的解,但是可能某些数在模给定模数意义下没有逆元,这个时候注意到我们只是想让当前主元所在列除了主对角线上的其他元素置为 0,我们考虑采取类似求 gcd 的“辗转相除”法,假设当前主元是 \(i\),要消去第 \(j\) 行的主元,我们考虑只通过将 \(a_j=a_j-a_i\times r\),其中 \(r=\lfloor\dfrac{a_{j,i}}{a_{i,i}}\rfloor\),之后 \(a_{j,i}\) 会变成 \(a_{j,i}\bmod a_{i,i}\),然后交换后重复执行上述流程直到 \(a_{j,i}\) 变为零,如果把 \(x\) 视为 \(a_{i,i}\)\(y\) 视为 \(a_{j,i}\) 的话,会发现这就是在对 \(x,y\) 做辗转相除法。由于矩阵的每个元素只会减小 \(\log\) 次,所以这部分复杂度是平方对数的,不是算法瓶颈,复杂度仍为三方。

【模板】行列式求值

矩阵树定理

问题引入:给定一张有向图,求以 \(r\) 为根的内向生成树数量。\(n\le 300\)

定理内容:

定义 \(D\) 为该图的度数矩阵,\(A\) 为该图的邻接矩阵,\(L\) 为该图的拉普拉斯矩阵,\(L_r\)\(L\) 去掉第 \(r\) 行第 \(r\) 列的 \(n-1\) 阶子式。

其中 \(D_{i,i}\)\(i\) 节点的出度大小,其他位置为零。\(A_{i,j}\) 为从 \(i\)\(j\) 的边数,\(L=D-A\)。不难发现自环的情况在相减的时候被抵消了。

则以 \(r\) 为根的内向生成树数量为 \(\det L_r\)

证明:

参考:here

\(L_r\) 用定义式展开:

\[\det L_r=\sum_{p} (-1)^{\pi(p)}\prod L_{i,p_i} \]

考虑给这个东西赋一个组合意义。让 \(L_{i,i}\) 表示从 \(i\) 出发任选一些出边的方案数,\(-L_{i,j}(i\neq j)\) 表示从 \(i\) 出发经过一条边到 \(j\) 的方案数,则 \(\prod L_{i,p_i}\) 可以视作对除了根节点 \(r\) 以外的其他点选择一条出边的方案数,带系数。不难发现,一个方案形成一个合法生成树当且仅当方案连出来的图不存在环。

考虑容斥,我们钦定某些点构成若干个环(\(p_i\neq i\)),剩下的点任意(\(p_i=i\)),那么一个方案的容斥系数为 \((-1)^{枚举的环数}\)。那么这个系数是否等于 \((-1)^{\pi(p)}\) 乘上 \(L_{i,p_i}\)\(-1\) 的积呢?

引理:排列的逆序对数的奇偶性等于 \(n\) 减去排列所形成的环数的奇偶性。这里的“环数”指的是 \(i\rightarrow p_i\) 连边所形成的环数,包含自环。

证明:对于每一个环,设其长度为 \(m\),我们可以通过 \(m-1\) 次操作(交换两个数)使该环上所有元素都归位(即 \(p_i=i\)),也就是说,我们可以通过 \(n\) 减去环数次操作(每个环都省一次操作)将原排列归位。每次操作会使逆序对奇偶性改变。

根据如上引理,我们有 \((-1)^{n-1-包含自环的环数}=(-1)^{\pi(p)}\),而这个环数等于自环数+枚举的环数,于是我们有 \((-1)^{n-1}=(-1)^{\pi(p)}(-1)^{自环数}(-1)^{枚举的环数}\)。设 \(p_i\neq i\) 的数量为 \(cnt\)(即 \(L_{i,p_i}\) 贡献的 \(-1\) 数量),则自环数等于 \(n-1-cnt\),则 \((-1)^{n-1}=(-1)^{\pi(p)}(-1)^{n-1-cnt}(-1)^{枚举的环数}\),而众所周知 \((-1)^k=\dfrac{1}{(-1)^k}\),把等号右侧前两项除过去有 \((-1)^{\pi(p)}(-1)^{cnt}=(-1)^{枚举的环数}\),证毕。

矩阵树定理的拓展/变式

例题 0:给定一张无向图,求生成树个数。\(n\le 300\)

题解:无向图生成树计数本质上和有向图生成树计数一样,因为无向边等价于两条有向边。而由于是无向图,所以以谁为根、内向还是外向树都不重要,随便钦定一个根即可。外向树计数本质也相同,只需要将原图边反向做内向树计数即可。较为平凡。


例题 1(P6178 【模板】Matrix-Tree 定理):给定一张有向带权图,求以 \(1\) 为根的外向树的所有生成树权值之和。生成树的权值定义为树上所有边的权值的乘积。\(n\le 300\)

题解:考虑将权值为 \(w_i\) 的边拆成 \(w_i\) 条无权边,和原问题相同,跑矩阵树定理即可。实际上这就是矩阵树定理的带权形式,只不过 \(D_{i,i}\) 的值修改为 \(i\) 为起点的边权之和,\(A_{i,j}\) 的值修改为 \(i\)\(j\) 的所有连边的边权之和。生成树计数是带权矩阵树定理的无权版本(当边权都为 \(1\) 时求出的是生成树数量)。


例题 2(P6624 [省选联考 2020 A 卷] 作业题):给定一张带权无向图,求所有生成树权值之和。生成树的权值定义为树上所有边的权值的最大公约数和总和的乘积。\(n\le 30,w_i\le 152501\)

题解:对后面的那一大坨 \(\gcd\) 应用欧拉反演(公式:\(n=\sum_{d|n} \varphi(d)\))得:\(\sum_{T}(\sum w_i\times \sum_{d|\gcd(w_i)}\varphi(d))= \sum_{d}\varphi(d)\sum_T\sum w_i\times [d|w_i]\),枚举 \(d\),考虑把边权是 \(d\) 的倍数的那些边拎出来做矩阵树定理,问题转化为求所有生成树的边权和之和。但我们发现矩阵树定理只能求生成树边权积之和。对多项式熟悉的同学不难发现这实际上就是 \(1+w_i x\) 的卷积的一次项系数(也可以这么考虑,枚举每条边,计算包含这条边的生成树个数,考虑选出这条边的一次项,和剩下边的常数项相乘即可得到我们想要的结果,也可以考虑多项式乘法在这题上的组合意义)。时间复杂度 \(O(n^3\max w)\),但由于跑不满所以能过。


例题 3(P5296 [北京省选集训2019] 生成树计数):给定 \(n\) 个点的无向带权完全图,求出其生成树权值的 \(k\) 次方之和,对 \(998244353\) 取模。\(n\le 30,k\le 30\)

题解:考虑把 \(k\) 次方用二项式定理展开:\((w+w_i)^k=\sum_{l=0}^k\dbinom{k}{l}w^lw_i^{k-l}\),发现它不能很好的写成多项式卷积的形式,考虑把组合数进一步展开:\((w+w_i)^k=\sum_{l=0}^k\dfrac{k!}{l!(k-l)!}w^lw_i^{k-l}=k!\sum_{l=0}^k\dfrac{w^l}{l!}\cdot \dfrac{w_i^{k-l}}{(k-l)!}\),最终得出

\[\dfrac{(w+w_i)^k}{k!}=\sum_{l=0}^k\dfrac{w^l}{l!}\cdot \dfrac{w_i^{k-l}}{(k-l)!} \]

我们成功的把式子化成了多项式卷积的形式,将 \(\dfrac{w^l}{l!}\) 视为多项式中 \(x^l\) 的系数,然后把这个多项式当做边权跑矩阵树定理即可。注意根据上述推导,最终求出来的结果是 \(\dfrac{\sum w_i}{k!}\),需要把答案乘 \(k!\) 才是最终答案。这个东西似乎有个名字叫二项式卷积?

由于 \(k\) 只有 \(30\),所以我们并不需要什么 FFT NTT 之类的科技,直接 \(O(k^2)\) 卷积、求逆即可。时间复杂度 \(O(n^3k^2)\)

BEST 定理

问题引入:给定一张欧拉图,求该图的本质不同欧拉回路个数。本质不同即两种方案不循环同构。\(n\le 100\)

定理内容:

\(\operatorname{ans}=T\times \prod (out_i-1)!\),其中 \(out_i\)\(i\) 点的出度,\(T\) 是该图生成树数量。

证明:

不会。

未完待续。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/871717.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程桌面键盘记录器

针对远程桌面协议 (RDP) 相关进程的击键记录器,它利用键盘输入挂钩,允许其记录某些上下文中的击键(例如在 mstsc.exe 和 CredentialUIBroker.exe 中) 使用vs直接编译就可以了运行TakeMyRDP.exe打开mstsc,输入ip地址,输入账号密码密码直接显示出来,这个exe不需要高权限运行…

【nginx】Nginx重定向方法

Nginx重定向配置是一个功能强大且灵活的工具,可以根据具体需求实现各种重定向规则。 以下是对Nginx请求重定向配置方法的详细解析:1、基本概念 请求重定向是指当客户端向服务器发送一个请求时,服务器根据一定的规则将客户端的请求引导到另外一个URL的过程。在Nginx中,通过r…

利用mybatis拦截器记录sql,辅助我们建立索引(二)

背景 上一篇中讲述了mybatis的mapper初始化过程和执行过程,这篇再讲讲具体的拦截器的使用,以实现记录sql到持久化存储,通过分析这些sql,我们就能更方便地建立索引。 利用mybatis拦截器记录sql,辅助我们建立索引(一) 我本地项目的大概版本: spring boot版本2.7,mybatis版…

JMeter通过JSON提取器获取任意一行数据中的多个字段

存在如下响应信息: { "result": { "data": [ { "字段1": "DK-01", "字段2": null, "字段3": "210(3mm/40kg)",}, {&q…

Windows7 64位系统ODBC数据源配置方法

Windows7 64位系统ODBC数据源配置方法 注意以下所说的步骤是在安装好SQL2000或者端内有绿色SQL的情况下,已经在查询分析器内一键建立并还原好数据库之后才进行的,请不要跳步骤进行,否则会出错。一键端可直接操作。(win7系统架设传奇3前请将UAC账户权限调至最低) Windows7…

【clang-format】Windows11下代码格式化工具clang-format.exe下载

官方项目地址:https://github.com/llvm/llvm-project/releases下滑找到win64.exe下载慢的可以去这个github代下网站:https://d.serctl.com/下载好后不用安装,直接解压这个exe文件 把目录bin里面的clang-format.exe文件复制出来,放到一个新文件夹里,比如我放到了D盘根目录下…

聊一聊 操作系统蓝屏 c0000102 的故障分析

一:背景 1. 讲故事 今年以来不知道为啥总有些朋友加我微信,让我帮忙分析下操作系统蓝屏问题,我也觉得挺好奇的,就问了其中一位朋友,说是B站来的,我就在拼命回忆,为啥会找我分析蓝屏?突然想到了去年好像录了一集关于 CrowdStrike 的热点事件。。。我本来是做.NET程序的故…

4-01-(C++类 this指针)

结构体传参,传递的是副本 结构体里面写函数,结构体的大小不变 函数的地址不在结构体里面。 类里面的函数都要传一个this指针,即 lea ecx,[s] 普通的函数结构体传参 this指针的特点 1、你用或者不用,它就在那里 2、参数个数确定的时候,用ecx来传递 3、参数个数不确…

协议通道版iMessage蓝号检测,iMessages数据筛选,无痕检测是否开启iMessage服务

一、实现iMessage数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2…

【开源】一款功能全面的商用级溯源防伪系统,适用于各种溯源场景

项目介绍 HiPi是一款开源、功能全面的商用级溯源防伪系统,一物一码系统,适用于各种溯源场景的大、中、小、微规模企业。系统能够追踪记录产品的生命周期各个环节,并将产品信息保存在系统中,实现品牌保护、产品营销、防止假冒伪劣产品、防窜货、产品追踪溯源等功能。 应用场…

行为分析智能监测摄像机

行为分析智能监测摄像机具有高效的行为识别和分类能力。通过摄像头捕捉到目标区域内的行为活动,并通过预先训练好的机器学习算法进行识别和分类,可以准确地分析出不同的行为特征,例如跌倒、打架等,并及时发出警报或提醒相关管理人员。这种高效的行为识别能力可以帮助监控中…