CF438E

题目叙述

给定一个数组 \(c\) 和一个数 \(s\) ,求满足以下条件的二叉树数量:

  • 每个节点有个权值,权值为 \(c\) 中的一个数
  • 所有节点权值和为 \(s\)

题解

首先设 \(f_i\) 表示 \(i\) 个结点组成的这样的树有 \(f_i\) 个,\(g_i\) 表示数 \(i\) 是否在。那么 \(f_i=\sum_{j=0}^i g_j\sum_{k=0}^{i-j}f_k\cdot f_{i-j-k}\) 。其实也就是 \(f_i=\sum_{i+j+k=i}g_i\cdot f_{j}\cdot f_k\) 。如果 \(F\)\(f\) 的生成函数,\(G\)\(g\) 的生成函数,那么有 \(F^2\cdot G+1=F\) 。注意,这里 \(+1\) 是因为边界。具体来说,\(F^2\cdot G\) 的零次项很明显是 0. 但是 \(f_0 = 1\) 。所以这非常不正确。所以要 \(+1\)

那么剩下的任务就是解方程了。\(F^2\cdot G+1=F\),这是个二次方程,但是由于 \(G\) 是一个不可求逆的东西,所以并不能直接套用求根公式。考虑这样做:

\[\begin{aligned}&F^2\cdot G-F+1=0\\\Rightarrow &(F\cdot G)^2-(F\cdot G)+G=0\\\Rightarrow &F\cdot G=\frac{1\pm \sqrt{1-4G}}{2}\end{aligned} \]

很明显,左式没有常数项。若右式取正,那么右式必然有常数项。所以右式取负。

也就是:

\[\begin{aligned}&F\cdot G=\frac{1-\sqrt{1-4G}}{2}\\\Rightarrow &F\cdot G=\frac{2G}{1+\sqrt{1-4G}}\\\Rightarrow &G\cdot (F-\frac{2}{1+\sqrt{1-4G}})=0\\\Rightarrow &F=\frac{2}{1+\sqrt{1-4G}}\end{aligned} \]

所以直接做即可。

posted @ 2020-07-11 18:10  acniu  阅读(101)  评论(0编辑  收藏  举报