将问题转化为有多少个合法的 father 数组集。容易发现,肯定有 f_i\neq i,且对于 u ,r_u( u 的儿子个数)即为 u 在数组中出现的位置。
按顺序去考虑每一个 u ,发现有 f_u 被占和不被占的情况。当 f_u 不被占的时候,就是在剩余的位置中放 r_u 个 u ,设 s_i=\sum_{j=1}^i r_j,则当前方案为 C_{n-s_{u-1}-1}^{r_u} ,减1的原因是 u 不能做自己的父亲。当 f_u 被占的情况,剩余的位置有 n-s_{u-1} 个数,直观上讲它是可以取这里面的任意位置的。但是如果真是这样就不可高效完成,而且确实是有问题的。f_u 有值的时候,说明 u 已经加入树内,则 u 的最高祖先的 father 值也是空的,但显然是不能作为 u 的儿子的,所以方案也是 C_{n-s_{u-1}-1}^{r_u}。
所以方案数就是:
\sum_{i=1}^nC_{n-s_i-1}^{r_i}
经过简单的代还会发现就是:
\frac{(n-1)!}{\prod_{i=1}^nr_i!}
From [20241109] 锦标赛
对于线段树的一次建树过程,每次合并的操作为枚举左边和右边时,时间复杂度为 O(n^2) 。
From [Ynoi Easy Round 2021] TEST_152
对于n个不同颜色的段覆盖,最后分的的区间段最多 O(n)。
From 消除游戏
对于分为两边分别为 n、m 个点的二分图,生成树有 n^{m-1}m^{n-1} 种。
From [20250701]BST
所有点的深度和等于所有点的子树和。
From 团队选拔
固定一个端点的区间不同的 gcd 只有 log 种,故对于一个长度为 n 序列,所有区间的不同的 gcd 共有nlogV 种。