:star2: Wiki of OI / ICPC for everyone. (某大型游戏线上攻略,内含炫酷算术魔法)
リビジョン | c0701ce58769d16028c253b28e0261bbcf029f72 (tree) |
---|---|
日時 | 2021-01-31 22:07:57 |
作者 | Early <lin_erli@outl...> |
コミッター | GitHub |
Refactor matrix-tree
@@ -104,13 +104,13 @@ $$ | ||
104 | 104 | |
105 | 105 | ## 例题 |
106 | 106 | |
107 | -???+ note "[「HEOI2015」小 Z 的房间](https://loj.ac/problem/2122)" | |
107 | +???+ note "例题 1:[「HEOI2015」小 Z 的房间](https://loj.ac/problem/2122)" | |
108 | 108 | |
109 | - **解** 矩阵树定理的裸题。将每个空房间看作一个结点,根据输入的信息建图,得到 Laplace 矩阵后,任意删掉 $L$ 的第 $i$ 行第 $i$ 列,求这个子式的行列式即可。求行列式的方法就是高斯消元成上三角阵然后算对角线积。另外本题需要在模 $k$ 的整数子环 $\mathbb{Z}_k$ 上进行高斯消元,采用辗转相除法即可。 | |
109 | + **解** 矩阵树定理的裸题。将每个空房间看作一个结点,根据输入的信息建图,得到 Laplace 矩阵后,任意删掉 $L$ 的第 $i$ 行第 $i$ 列,求这个子式的行列式即可。求行列式的方法就是高斯消元成上三角阵然后算对角线积。另外本题需要在模 $k$ 的整数子环 $\mathbb{Z}_k$ 上进行高斯消元,采用辗转相除法即可。 | |
110 | 110 | |
111 | -???+ note "[「FJOI2007」轮状病毒](https://www.luogu.com.cn/problem/P2144)" | |
111 | +???+ note "例题 2:[「FJOI2007」轮状病毒](https://www.luogu.com.cn/problem/P2144)" | |
112 | 112 | |
113 | - **解** 本题的解法很多,这里用矩阵树定理是最直接的解法。当输入为 $n$ 时,容易写出其 $n+1$ 阶的 Laplace 矩阵为: | |
113 | + **解** 本题的解法很多,这里用矩阵树定理是最直接的解法。当输入为 $n$ 时,容易写出其 $n+1$ 阶的 Laplace 矩阵为: | |
114 | 114 | |
115 | 115 | $$ |
116 | 116 | L_n = \begin{bmatrix} |
@@ -131,66 +131,67 @@ $$ | ||
131 | 131 | |
132 | 132 | **解** 推导递推式后利用矩阵快速幂即可求得。 |
133 | 133 | |
134 | -??? danger "推导递推式的过程。警告:过程冗杂" | |
135 | - 注意到 $L_n$ 删掉第 1 行第 1 列以后得到的矩阵很有规律,因此其实就是在求矩阵 | |
136 | - | |
137 | - $$ | |
138 | - M_n = \begin{bmatrix} | |
139 | - 3& -1& 0& \cdots& 0& -1\\ | |
140 | - -1& 3& -1& \cdots& 0& 0\\ | |
141 | - 0& -1& 3& \cdots& 0& 0\\ | |
142 | - \vdots& \vdots& \vdots& \ddots& \vdots& \vdots\\ | |
143 | - 0& 0& 0& \cdots& 3& -1\\ | |
144 | - -1& 0& 0& \cdots& -1& 3\\ | |
145 | - \end{bmatrix}_{n} | |
146 | - $$ | |
147 | - | |
148 | - 的行列式。对 $M_n$ 的行列式按第一列展开,得到 | |
149 | - | |
150 | - $$ | |
151 | - \det M_n = 3\det \begin{bmatrix} | |
152 | - 3& -1& \cdots& 0& 0\\ | |
153 | - -1& 3& \cdots& 0& 0\\ | |
154 | - \vdots& \vdots& \ddots& \vdots& \vdots\\ | |
155 | - 0& 0& \cdots& 3& -1\\ | |
156 | - 0& 0& \cdots& -1& 3\\ | |
157 | - \end{bmatrix}_{n-1} + \det\begin{bmatrix} | |
158 | - -1& 0& \cdots& 0& -1\\ | |
159 | - -1& 3& \cdots& 0& 0\\ | |
160 | - \vdots& \vdots& \ddots& \vdots& \vdots\\ | |
161 | - 0& 0& \cdots& 3& -1\\ | |
162 | - 0& 0& \cdots& -1& 3\\ | |
163 | - \end{bmatrix}_{n-1} + (-1)^n \det\begin{bmatrix} | |
164 | - -1& 0& \cdots& 0& -1\\ | |
165 | - 3& -1& \cdots& 0& 0\\ | |
166 | - -1& 3& \cdots& 0& 0\\ | |
167 | - \vdots& \vdots& \ddots& \vdots& \vdots\\ | |
168 | - 0& 0& \cdots& 3& -1\\ | |
169 | - \end{bmatrix}_{n-1} | |
170 | - $$ | |
171 | - | |
172 | - 上述三个矩阵的行列式记为 $d_{n-1}, a_{n-1}, b_{n-1}$ 。注意到 $d_n$ 是三对角行列式,采用类似的展开的方法可以得到 $d_n$ 具有递推公式 $d_n=3d_{n-1}-d_{n-2}$ 。类似地,采用展开的方法可以得到 $a_{n-1}=-d_{n-2}-1$ ,以及 $(-1)^n b_{n-1}=-d_{n-2}-1$ 。将这些递推公式代入上式,得到 | |
173 | - | |
174 | - $$ | |
175 | - \det M_n = 3d_{n-1}-2d_{n-2}-2 | |
176 | - $$ | |
177 | - | |
178 | - $$ | |
179 | - d_n = 3d_{n-1}-d_{n-2} | |
180 | - $$ | |
181 | - | |
182 | - 于是猜测 $\det M_n$ 也是非齐次的二阶线性递推。采用待定系数法可以得到最终的递推公式为 | |
183 | - | |
184 | - $$ | |
185 | - \det M_n = 3\det M_{n-1} - \det M_{n-2} + 2 | |
186 | - $$ | |
187 | - | |
188 | - 改写成 $(\det M_n+2) = 3(\det M_{n-1}+2) - (\det M_{n-2} + 2)$ 后,采用矩阵快速幂即可求出答案。 | |
189 | - | |
190 | -???+ note "例题 3" | |
191 | - 「BZOJ3659」WHICH DREAMED IT | |
192 | - | |
193 | - **解** 本题是 BEST 定理的直接应用,但是要注意,由于题目规定“两种完成任务的方式算作不同当且仅当使用钥匙的顺序不同”,对每个欧拉回路,1 号房间可以沿着任意一条出边出发,从而答案还要乘以 1 号房间的出度。 | |
134 | + ??? danger "推导递推式的过程。警告:过程冗杂" | |
135 | + 注意到 $L_n$ 删掉第 1 行第 1 列以后得到的矩阵很有规律,因此其实就是在求矩阵 | |
136 | + | |
137 | + $$ | |
138 | + M_n = \begin{bmatrix} | |
139 | + 3& -1& 0& \cdots& 0& -1\\ | |
140 | + -1& 3& -1& \cdots& 0& 0\\ | |
141 | + 0& -1& 3& \cdots& 0& 0\\ | |
142 | + \vdots& \vdots& \vdots& \ddots& \vdots& \vdots\\ | |
143 | + 0& 0& 0& \cdots& 3& -1\\ | |
144 | + -1& 0& 0& \cdots& -1& 3\\ | |
145 | + \end{bmatrix}_{n} | |
146 | + $$ | |
147 | + | |
148 | + 的行列式。对 $M_n$ 的行列式按第一列展开,得到 | |
149 | + | |
150 | + $$ | |
151 | + \det M_n = 3\det \begin{bmatrix} | |
152 | + 3& -1& \cdots& 0& 0\\ | |
153 | + -1& 3& \cdots& 0& 0\\ | |
154 | + \vdots& \vdots& \ddots& \vdots& \vdots\\ | |
155 | + 0& 0& \cdots& 3& -1\\ | |
156 | + 0& 0& \cdots& -1& 3\\ | |
157 | + \end{bmatrix}_{n-1} + \det\begin{bmatrix} | |
158 | + -1& 0& \cdots& 0& -1\\ | |
159 | + -1& 3& \cdots& 0& 0\\ | |
160 | + \vdots& \vdots& \ddots& \vdots& \vdots\\ | |
161 | + 0& 0& \cdots& 3& -1\\ | |
162 | + 0& 0& \cdots& -1& 3\\ | |
163 | + \end{bmatrix}_{n-1} + (-1)^n \det\begin{bmatrix} | |
164 | + -1& 0& \cdots& 0& -1\\ | |
165 | + 3& -1& \cdots& 0& 0\\ | |
166 | + -1& 3& \cdots& 0& 0\\ | |
167 | + \vdots& \vdots& \ddots& \vdots& \vdots\\ | |
168 | + 0& 0& \cdots& 3& -1\\ | |
169 | + \end{bmatrix}_{n-1} | |
170 | + $$ | |
171 | + | |
172 | + 上述三个矩阵的行列式记为 $d_{n-1}, a_{n-1}, b_{n-1}$ 。 | |
173 | + 注意到 $d_n$ 是三对角行列式,采用类似的展开的方法可以得到 $d_n$ 具有递推公式 $d_n=3d_{n-1}-d_{n-2}$ 。类似地,采用展开的方法可以得到 $a_{n-1}=-d_{n-2}-1$ ,以及 $(-1)^n b_{n-1}=-d_{n-2}-1$ 。 | |
174 | + 将这些递推公式代入上式,得到: | |
175 | + | |
176 | + $$ | |
177 | + \det M_n = 3d_{n-1}-2d_{n-2}-2 | |
178 | + $$ | |
179 | + | |
180 | + $$ | |
181 | + d_n = 3d_{n-1}-d_{n-2} | |
182 | + $$ | |
183 | + | |
184 | + 于是猜测 $\det M_n$ 也是非齐次的二阶线性递推。采用待定系数法可以得到最终的递推公式为 | |
185 | + | |
186 | + $$ | |
187 | + \det M_n = 3\det M_{n-1} - \det M_{n-2} + 2 | |
188 | + $$ | |
189 | + | |
190 | + 改写成 $(\det M_n+2) = 3(\det M_{n-1}+2) - (\det M_{n-2} + 2)$ 后,采用矩阵快速幂即可求出答案。 | |
191 | + | |
192 | +???+ note "例题 3:「BZOJ3659」WHICH DREAMED IT" | |
193 | + | |
194 | + **解** 本题是 BEST 定理的直接应用,但是要注意,由于题目规定“两种完成任务的方式算作不同当且仅当使用钥匙的顺序不同”,对每个欧拉回路,1 号房间可以沿着任意一条出边出发,从而答案还要乘以 1 号房间的出度。 | |
194 | 195 | |
195 | 196 | ## 注释 |
196 | 197 |