CF1868C Travel Plan

发布时间 2023-09-25 16:28:50作者: 御坂夏铃

注意到树的深度很小,所以路径长度也很小,可以先 DP 出每种路径长度的数量。

\(f_{i,j,0/1}\) 表示深度为 \(i\) 的满二叉树,长度为 \(j\) 的路径,一个端点不一定/一定在根结点的数量。跨越左右子树的转移就暴力枚举两侧深度。当然这里可以直接算。

但原树只是完全二叉树。观察到根的左右子树一定有一棵是满二叉树,所以可以递归计算不是满二叉树的那棵子树然后合并,方法同上。

最后计算答案,枚举最大值,再枚举最大值的位置(有多个最大值就取最靠前的位置,避免算重)。计算过程显然可以用等比数列求和公式优化,快速幂也可以通过预处理去掉,所以这里是 \(O(1)\) 的。