CF1824B

一种不同于官方题解的 \(O(n)\) 做法

考虑一个点在什么情况下能作为答案。

发现应当满足这个点为根时,他的每个儿子的字数内点数均不超过 \(\frac{k}{2}\)

\(k\) 为奇数,那么这样的点唯一;否则这样的点将形成一条链(实际上不需要用到这一性质)。

设这个点若干子树大小分别为 \(x_1,\cdots,x_m\),我们发现,如果某个子树内的点数超过了 \(\frac{k}{2}\),那么这样的子树至多只有一个。下文记 \(k=2w\),则 \(w=\frac{k}{2}\)

考虑容斥,钦定某个 \(x_i\) 中放了超过 \(w\) 个,方案数为

\[\sum_{j=w+1}^k\binom{x_i}{j}\binom{n-x_i}{k-j} \]

类似于LNOI2022 盒,考虑其组合意义,将其看作:在一行排列的 \(n\) 个盒子中放下 \(k\) 个球,要求第 \(w+1\) 个球放在第 \(x\) 个盒子之前的方案数。枚举第 \(w+1\) 个球的位置,有

\[\sum_{j=w+1}^k\binom{x_i}{j}\binom{n-x_i}{k-j}=\sum_{i=1}^{x_i}\binom{i-1}{w}\binom{n-i}{k-w-1} \]

这样我们就可以线性地每个 \(x_i=1\cdots n\) 预处理出这个值了。设其为 \(f(x_i)\),则该点的答案就是 \(\binom{n}{k}-\sum f(x_i)\)。总的时间复杂度为 \(O(n)\)

https://codeforces.com/contest/1824/submission/205182489

posted @ 2023-05-09 16:19  云浅知处  阅读(318)  评论(0编辑  收藏  举报