首页 > 其他分享 >一类生成树计数问题。

一类生成树计数问题。

时间:2024-03-09 20:11:40浏览次数:13  
标签:det 复杂度 矩阵 生成 一类 计数问题 TD times sum

statement

给定数列 \(w_1,w_2\cdots w_n,w_i\in [1,m]\) ,考虑一个 \(n\) 个点的图,节点 \(i,j\) 之间的边的个数为 \(\sum\limits_{k=1}^m a_{k,w_i}b_{k,w_j}c_k\),你需要求出这个图的生成树个数。

solution

设度数矩阵为 \(D\),邻接矩阵为 \(G\),由矩阵树定理,我们要计算 \(\det(D-G)\)(需要去掉一行一列,这个不影响啥)。

考虑令矩阵 \(A_{i,k}=a_{k,w_i}c_k\),矩阵 \(B_{i,k}=b_{k,w_i}\) ,那么 \(G=AB^{T}\) 。

引理:Matrix Determinant Lemma
设 \(A\) 为方阵 ,\(u,v\) 为列向量 ,那么 \(\det(A+uv^T)=\det(A)\det(I+v^TA^{-1}u)\) ,证明略。

把这里的 \(u,v\) 换成 \(n\times m\) 的矩阵不影响正确性,综上:

\(\det(D-G)=\det(D-AB^T)=\det(D)\det(I_m-B^TD^{-1}A)\) 。

其中 \(D\) 是对角矩阵行列式好算,后面是一个 \(m\times m\) 的矩阵。

更具体的,我们考虑这个 \(m\times m\) 矩阵的每一个位置是啥:

首先 \(B^TD^{-1}\),因为 \(D\) 是对角矩阵,所以逆矩阵就是把每个位置取逆。
那么\((B^TD^{-1})_{i,j}=b_{i,w_j}D^{-1}_{j,j}\) ,\((B^TD^{-1}A)_{i,j}=\sum_{k=1}^nb_{i,w_k}D^{-1}_{k,k}a_{j,w_k}c_j\) 。

直接计算行列式可以做到 \(O(n+m^3)\) 的复杂度。

很多题中,\(A,B\) 都是布尔矩阵,所以这个矩阵比较稀疏,使用稀疏矩阵消元可以做到更加优秀的复杂度。

标签:det,复杂度,矩阵,生成,一类,计数问题,TD,times,sum
From: https://www.cnblogs.com/jesoyizexry/p/18063216

相关文章

  • python迭代器、生成器与可迭代对象
    迭代(Iteration)如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration),这些可以直接作用于for循环的对象统称为可迭代对象:Iterable方法是通过collections.abc模块的Iterable类型判断,一个对象是否为可迭代对象>>>fromcollections.......
  • echarts报表生成pdf文件
    完整的demo如下:<!DOCTYPEhtml><html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>Balken</title><scriptsrc="static/echarts/echarts.js"......
  • css滤镜图片的原样生成
    现在需要对一个复杂滤镜的图片进行保存,使这个图片能保留滤镜的效果。原理很简单,就是在原来image的基础上,新建一个canvas,然后增加滤镜效果,画出这个图片,最后保存这个图片到本地。js代码简单版本(未实现批量)`ApplyFiltertoImage<script>constoriginalImage=document......
  • windows下快速生成项目目录树(转)
    原文:https://blog.csdn.net/air_knight/article/details/109039230TreeforWindows下载:https://gnuwin32.sourceforge.net/packages/tree.htm1、、背景每当逛github看到其他作者的项目都使用完整的目录树,就会想在自己做项目的时候生成目录树,方便了解整个项目的体系结构。2、......
  • jsPDF 文字、图片生成PDF(解决中文乱码)
    JSPDF官网在线演示地址(不支持中文)思源黑体字体库下载地址:https://gitee.com/ABCpril/SourceHansTtf   https://github.com/adobe-fonts/source-han-sans/blob/release/README.md (后面一个是完整的包、比较大,一般用前面一种)JSPDF支持中文(思源黑体)采坑之旅,JSPDF中文字体......
  • Hexo、VitePress、Docusaurus,哪个最适合你的静态网站生成器?
    在选择合适的静态网站生成器时,Hexo、VitePress、Docusaurus是三个备受关注的选项,那么到底哪一个框架更适合你呢?本文将从使用场景、社区生态、功能、性能、扩展性这五个方面,帮你全方位分析各个框架的优缺点,以便为你的技术选型提供参考。1、应用场景Hexo,官方定位自己是"快速......
  • docker commit命令,本地镜像生成
    1.本地镜像生成dockercommit-m"commitInfo"-a="authorName"containerId新创建的目标镜像名:[标签名]  镜像的提交,可以让我们不断去叠加镜像: https://www.bilibili.com/video/BV1gr4y1U7CY?p=25&spm_id_from=pageDriver&vd_source=7ce721b64f52f392bdafe83543918639......
  • 最小生成树
    最小生成树AcWing.346走廊泼水节简要题意给定一个N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树。求增加的边的权值总和最小是多少,保证边权位非负整数。题目分析考虑kruskal的过程,是把权值从小到大排序,依次扫描每一个边。那么......
  • Swagger-自动生成接口文档
    Swagger官网:https://swagger.io/Swagger3是接口文档生成工具依赖pom.xml<dependency> <groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi2-spring-boot-starter</artifactId><version>4.4.0</version></......
  • 类以撒的结合的房间生成算法
    类以撒的结合的房间生成算法原链接翻译版本目前本人只实现了房间大小都一样的情况,没有什么2x2,L型,2x1之类的房间放个效果图算法需要注意的房间选择对于当前位置是否有设置房间(是否被占位)当前房间位置是否越界(超出限定范围)当前位置的周围4方向的房间量是否大于1个(为什......