奖励:纯粹通过生成函数来解决问题。

· · 个人记录

我们发现根的区间必须完全包含于子孙的区间或者与其不交,因此只考虑这颗子树内的相对大小时,根的区间形如 [i,i+1]

因此一棵树的答案是 \frac{(2n)!}{2^{n}\prod s_i}

直接生成函数,有 \frac{df}{dx}=e^f+(y-1)

这里 y 表示叶子的个数,x 表示总结点数,我们要求的答案是 \frac{(2n)!n!}{n2^n}[x^ny^k]f

为了方便起见,下面都用 f' 表示 \frac{df}{dx}

f'=e^f+y-1\\ f'e^{-f}=1+(y-1)e^{-f}\\

g=e^{-f},那么有

-g'=1+(y-1)g\\ -e^{(y-1)x}=e^{(y-1)x}g'+(y-1)e^{(y-1)x}g\\

h=e^{(y-1)x}g,那么有

-e^{(y-1)x}=h'\\ h=\frac{e^{(y-1)x}}{1-y}+C\\

这里 h 的常数项为 1,因此 C=-\frac{y}{1-y}

g=\frac{1}{1-y}-\frac{ye^{(1-y)x}}{1-y}\\ f=-\ln(\frac{1-ye^{(1-y)x}}{1-y})=\ln(1-y)-\ln(1-ye^{(1-y)x}) n![x^ny^k]f=\sum_{i=1}^k (-1)^{n-k+i}i^{n-1}\binom{n}{k-i}

然后就可以 O(n) 预处理 O(k\log_k n) 计算答案,或者 O(n\log n) 计算一行答案。

upd:好像也不需要 O(n) 预处理。