}
```
-å\9c¨è¿\99é\87\8cï¼\8c对äº\8e两个大å°\8fä¸\8dä¸\80æ ·ç\9a\84é\9b\86å\90\88ï¼\8cæ\88\91们å°\86大å°\8få°\8fç\9a\84并å\88°å¤§ç\9a\84ï¼\8cè\80\8cä¸\8dæ\98¯å¤§ç\9a\84è¿\9eæ\8e¥å°\8fç\9a\84。
+å\9c¨è¿\99é\87\8cï¼\8c对äº\8e两个大å°\8fä¸\8dä¸\80æ ·ç\9a\84é\9b\86å\90\88ï¼\8cæ\88\91们å°\86å°\8fç\9a\84é\9b\86å\90\88å\90\88并å\88°å¤§ç\9a\84é\9b\86å\90\88ä¸ï¼\8cè\80\8cä¸\8dæ\98¯å°\86大ç\9a\84é\9b\86å\90\88å\90\88并å\88°å°\8fç\9a\84é\9b\86å\90\88ä¸。
为什么呢?这个集合的大小可以认为是集合的高度(在正常情况下),而我们将集合高度小的并到高度大的显然有助于我们找到父亲
直接暴力预处理的时间复杂度为 $O(n^2)$ ,即对每一个子节点进行一次遍历,每次遍历的复杂度显然与 $n$ 同阶,有 $n$ 个节点,故复杂度为 $O(n^2)$ 。
-可以发现,每个节点的答案是其子树的叠加,考虑利用这个性质处理问题。
+可以发现,每个节点的答案由其子树何其本身得到,考虑利用这个性质处理问题。
我们可以先预处理出每个节点子树的 $size$ 和它的重儿子,重儿子同树链剖分一样,是拥有节点最多子树的儿子,这个过程显然可以 $O(n)$ 完成
![dsu-on-tree-2.png](./images/dsu-on-tree-2.png)
-_上图是一个例子_
+上图是一个例子。
这样,对于一个节点,我们遍历了一次重子树,两次非重子树,显然是最划算的。
-经过这个过程,我们获得了这个节点的子树的所有 ans
+通过执行这个过程,我们获得了这个节点所有子树的 ans
为什么不合并第一步和第三步呢?因为 check 数组不能重复使用,否则空间会太大,需要在 $O(n)$ 的空间内完成。
## 例题
???+ note "例题 1"
- 「HEOI2015」小 Z 的房间,可参考<https://www.lydsy.com/JudgeOnline/problem.php?id=4031>
+ 「HEOI2015」小 Z 的房间,可参考<https://www.lydsy.com/JudgeOnline/problem.php?id=4031>。
**解** 矩阵树定理的裸题。将每个空房间看作一个结点,根据输入的信息建图,得到 Laplace 矩阵后,任意删掉 L 的第 $i$ 行第 $i$ 列,求这个子式的行列式即可。求行列式的方法就是高斯消元成上三角阵然后算对角线积。另外本题需要在模 $k$ 的整数子环 $\mathbb{Z}_k$ 上进行高斯消元,采用辗转相除法即可。
???+ note "例题 2"
- 「FJOI2007」轮状病毒。可参考<https://www.lydsy.com/JudgeOnline/problem.php?id=1002>
+ 「FJOI2007」轮状病毒,可参考<https://www.lydsy.com/JudgeOnline/problem.php?id=1002>。
**解** 本题的解法很多,这里用矩阵树定理是最直接的解法。当输入为 $n$ 时,容易写出其 $n+1$ 阶的 Laplace 矩阵为: