题解:CF2122G Tree Parking
我并不认为官解非常好理解。
题目把时刻序列的合法性转化为一棵根树上每个结点的子树大小乘积 \(s_1\cdots s_n\)。固定一棵标号树后,可行的 \((l,r)\) 序列共有 \((2n)!/(2^{n}s_1\cdots s_n)\) 种,因此我们要求的是所有有 \(k\) 个叶子的标号树的 \(\tfrac1{s_1\cdots s_n}\) 之和。有经典结论,一棵树的拓扑序总数为 \(n!/(s_1\cdots s_n)\),于是问题化为统计所有有 \(k\) 个叶子的树的拓扑序个数,然后除以 \(n!\)。
把根设为最小标号 \(1\),并要求每条边父标号小于子标号,计数函数满足递推 \(f(n,k)=(n-k)\,f(n-1,k-1)+k\,f(n-1,k)\)。熟知这正是欧拉数关系,具体为 \(f(n,k)=A(n-1,k-1)\),其中 \(A\) 是欧拉数,表示长度 \(n-1\)、降段数恰为 \(k-1\) 的排列个数。利用容斥公式 \(A(n,k)=\sum_{j=0}^{k}(-1)^j\binom{n+1}{j}(k+1-j)^{n}\) 可以在 \(O(k\log n)\) 时间内求出。
最终答案就是 \(\displaystyle\frac{A(n-1,k-1)(2n)!}{n\,2^{n}}\bmod 998244353\)。

浙公网安备 33010602011771号