行列式相关
Part 0:前置知识
Part 1:行列式
1、定义
对于一个矩阵 \(A\),它的行列式为
其中 \(p\) 是一个 \(1\sim n\) 的排列,\(\tau(p)\) 表示 \(p\) 的逆序对数。
\(\operatorname{det(A)}\) 又写作 \(|A|\)。
2、基本性质
-
1.2.1. 对于一个上三角矩阵,它的行列式等于主对角线所有值的乘积。
-
1.2.2. 单位矩阵的行列式为 \(1\)。即 \(|I|=1\)。
-
1.2.3. 交换矩阵两行,行列式变号。
可以看作交换排列中的两个数,这会让逆序对数量改变奇偶性,因此行列式的值变号。
-
1.2.4. 将矩阵某一行乘上常数,行列式乘上相同常数。
-
1.2.5. 若矩阵有相同的两行,则行列式为 \(0\)。
因为交换相同的两行会让行列式变号,但矩阵保持不变。于是有 \(|A|=-|A|\),得 \(|A|=0\)。
-
1.2.6. 若矩阵两行存在倍数关系,则行列式为 \(0\)。
-
1.2.7. 若两个矩阵至多有一行不等,则将这不等的一行相加得到的新矩阵的行列式等于原矩阵行列式之和。
-
1.2.8. 将矩阵的某一行加上另一行的倍数,行列式不变。
设 \(A_d\leftarrow A_d+kA_c\),令 \(A\) 操作后的矩阵为 \(C\),令 \(B_i=A_i(i\ne d),B_d=kA_c\),根据 1.2.6. 知 \(|B|=0\)。又由 1.2.7. 得 \(|A|+|B|=|C|\),因此 \(|A|=|C|\)。
Part 2:习题
P4455 [CQOI2018] 社交网络
外向生成树计数板子题。
P3317 [SDOI2014] 重建
其实比较显然,但不会写代码……
一棵生成树 \(T\) 的权值是 \(\prod\limits_{e\not\in T}(1-P_e)\prod\limits_{e\in T}P_e\),容易想到变形成 \(\prod\limits_e (1-P_e)\prod\limits_{e\in T}\dfrac{P_e}{1-P_e}\),因此将每条边的权值记作 \(\dfrac{P_e}{1-P_e}\)。
注意浮点数的矩阵树定理不用记符号。当 \(P_e=1\) 时将 \(P_e\leftarrow P_e-eps\) 即可避免除以 \(0\)。
P6624 [省选联考 2020 A 卷] 作业题
看到 \(\gcd\),直接欧拉反演带走,式子化为
枚举 \(d\),直接做的复杂度是 \(\mathcal{O}(n^3V)\),过不去。
可以优化,只对存在 \(n-1\) 个倍数的 \(d\) 做矩阵树定理,时间复杂度变为 \(\mathcal{O}\left(n^3\times \dfrac{\sum \sigma_0(w_i)}{n-1}\right)=\mathcal{O}(n^2 \sum \sigma_0(w_i))\)。
CF917D Stranger Trees
其实这题和“边权和的和”是很像的,矩阵树定理能求出边权和的积,那考虑怎么让一堆边权相乘最后能得出有 \(k\) 条边重复的生成树个数。容易想到设没有的边的边权为 \(x^0\),给定的边边权为 \(x\),那么答案就是 \(x^k\) 前面的系数。
但问题是直接对多项式矩阵做矩阵树定理复杂度高达 \(\mathcal{O}(n^4\log n)\)。考虑最后得到的多项式 \(a_0+a_1x^1+\dots a_nx^n\),我们可以代入 \(n\) 个特殊值最后再用高斯消元插值回来,这样复杂度就到了 \(\mathcal{O}(n^4)\)。

浙公网安备 33010602011771号