矩阵树
行列式
定义一个矩阵 \(A\) 的行列式为:
其中 \(p\) 是枚举的所有排列,\(\mu\) 是逆序对数
一些性质:
-
\(det(I)=1\)
-
交换矩阵两行,行列式变号
-
每一行乘 \(t\),行列式乘 \(t\)
-
\(\begin{vmatrix}a+a' & b+b' \\ c & d\end{vmatrix}\)= \(\begin{vmatrix}a & b \\ c & d\end{vmatrix}\)+ \(\begin{vmatrix}a' & b' \\ c & d\end{vmatrix}\) ,用分配率证明
-
某两行一样的矩阵行列式为零,因为交换后取反,而本质相同,只能都是零
-
矩阵一行加上另一行的倍数行列式不变
-
伴随矩阵是代数余子式构成的矩阵的转置.
-
伴随矩阵等于逆矩阵乘行列式
因此可以通过矩阵求逆来得到所有的代数余子式
把一组数看成矩阵 \((i,j)\) 为 \(1\),求解行列式,由于只与奇偶性有关,那么计算式中的 \(-1\) 可以忽略
去掉一个相当于是代数余子式,用逆矩阵来求即可
矩阵树定理
设 \(A\) 为邻接矩阵,\(D\) 为度数矩阵(出边减入边加),矩阵 \(K=D-A\),\(k\) 任意一个 \(n-1\) 阶主子式的行列式值为图中生成树的个数
对于有向图而言,所求是以 \(1\) 为根的生成树
若度数统计为入边和则为外向树,反之为内向树
证明不会
数据范围小到可以容斥,那么枚举商家集合容斥即可
好吧这其实是个诈骗题,矩阵树这个东西还是太复杂了,并没有什么好方法进行构造
那么考虑乱搞,因为生成树的个数时 \(n^{n-2}\) 级别的,那么可以视作随机的数
那么可以随机 \(1000\) 个图,然后选取 \(x\) 个使得它们的乘积满足条件
这个 \(x\) 在折半后可以做到 \(4\),之后这个概率就非常大了
考虑用生成函数来限定这个恰好 \(k\) 个
那么对于原树的边设为 \(x+1\),求出的最终函数的每一项即为所求
考虑不用多项式的手段,而是转而用拉格朗日插值计算出前 \(n\) 个的矩阵树的值,用求系数的方式插出答案
其问题转化为要求所有生成树的边权之和
做法是这样的,将矩阵的每一个点都变成 \(ax+b\) 的形式,初始化为 \(w_ix+1\) 的形式
最后 \(x\) 项的系数就是答案
这样做的原因其实也很好理解,其实就是计算每一条边选择时的方案数 \(\times\) 边权
那么一次项一定是某一个边权再乘上其它所有的方案得来的