题解 北大集训2018 点分治
题意
给定 \(n\) 个点的树,求点分治方案数,对 \(10^9+7\) 取模。
两种方案不同当且仅当点分树不同。
\(1 \leq n \leq 5000\)
题解
考虑怎样合并两个点分治方案。如果我们有关于 \(u,v\) 的连通块的点分治方案,并且 \(u,v\) 在点分树中的深度分别为 \(x,y\),且现在多了一条 \((u,v)\) 的边,那么合并后的点分治方案中,我们可以以任意顺序归并,共 \(\dbinom{x+y}{x}\) 种方案:只需要注意到在点分治的每一步,我们可以选择在 \(u\) 那一侧进行一步分治,或是在 \(v\) 侧进行一步分治。
设 \(f(u,i)\) 表示 \(u\) 子树内 \(u\) 点分树深度为 \(i\) 的方案数。那么加入 \(u\) 的一棵子树 \(v\) 时,存在以下转移:
\[f'(u,i) = \sum \limits_{j=1}^{i} \sum \limits_{k=i-j}^{n} f(u,j)f(v,k) \dbinom{i-1}{j-1}
\]
后面的组合数即钦定 \(u\) 在点分树深度为 \(i\) 时,前 \(i-1\) 步需要恰好在 \(u\) 侧分治 \(j-1\) 步,这样才能在第 \(i\) 步分治到 \(u\),使得点分树深度为 \(u\)。
对 \(f(v,k)\) 做后缀和即可 \(O(n^2)\) 解决。