繁凡出品的全新系列:解题报告系列 —— 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数( 1 ∼ 5 1 \sim 5 1∼5),以模板题难度 1 1 1 为基准。
这样大家在学习算法的时候就可以执行这样的流程:
%
阅读我的【学习笔记】 / 【算法全家桶】学习算法 ⇒ \Rightarrow ⇒ 阅读我的相应算法的【解题报告】获得高质量题单 ⇒ \Rightarrow ⇒ 根据我的一句话题解的提示尝试自己解决问题 ⇒ \Rightarrow ⇒ 点开我的详细题解链接学习巩固(好耶)%
解题报告系列合集:【解题报告系列】超高质量题单 + 题解(ICPC / CCPC / NOIP / NOI / CF / AT / NC / P / BZOJ)
本题单前置知识:【学习笔记】树的计数,prufer(Prüfer)编码,Cayley公式及相应例题
1. prufer \text{prufer} prufer 序列
Prufer数列是无根树的一种数列。在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2。
2. prufer \text{prufer} prufer 序列的性质
性质1: prufer \text{prufer} prufer 序列与无根树一一对应。
显然
性质2: 度数为 d i d_i di 的节点会在 prufer \text{prufer} prufer 序列中出现 d i − 1 d_i-1 di−1 次。
当某个节点度数为 1 1 1 时,会直接被删掉,否则每少掉一个相邻的节点,它就会在序列中出现 1 1 1 次。
因此共出现 d i − 1 d_i-1 di−1 次。
性质3: 一个 n 个节点的完全图的生成树个数为 n n − 2 n^{n-2} nn−2 (Cayley 公式)。
对于一个 n n n 个点的无根树,它的 prufer \text{prufer} prufer 序列长为 n − 2 n-2 n−2 ,而每个位置有 n n n 种可能性,因此可能的 prufer \text{prufer} prufer 序列有 n n − 2 n^{n-2} nn−2 种。
又由于 prufer \text{prufer} prufer 序列与无根树一一对应,因此生成树个数应与 prufer \text{prufer} prufer 序列种树相同,即 n n − 2 n^{n-2} nn−2 。
性质4: 对于给定度数为 d 1 ∼ n d_{1\sim n} d1∼n 的一棵无根树共有 ( n − 2 ) ! ∏ i = 1 n ( d i − 1 ) ! \cfrac{(n-2)!}{\prod_{i=1}^n(d_i-1)!} ∏i=1n(di−1)!(n−2)! 种情况。
由上面的性质可以知道,度数为 d i d_i di 的节点会在 prufer \text{prufer} prufer 序列中出现 d i − 1 d_i-1 di−1 次。
则就是要求出 d i − 1 d_i-1 di−1 个 i ( 1 ≤ i ≤ n ) i(1\le i\le n) i(1≤i≤n)的全排列个数。
而上面那个式子就是可重全排列公式。(即全排列个数除以重复元素内部的全排列个数)