首页 > 其他分享 >[ABC222H] Beautiful Binary Tree 题解

[ABC222H] Beautiful Binary Tree 题解

时间:2024-10-12 09:26:43浏览次数:8  
标签:Beautiful Binary begin 3x frac 题解 align end 2n

第一次写拉格朗日反演。

思路

考虑如何操作。

发现出根节点外有 \(n-1\) 个点是一。

由于我们只能操作 \(n-1\) 次,相当于每一次操作必须把两个一合并。

一个点最多往上跳两层,所以要求它的父亲或者爷爷是一。

考虑设 \(f_i\) 表示当前节点为一并且整个子树总和为 \(i\) 的方案数,\(g_i\) 表示当前节点为零并且整个子树总和为 \(i\) 的方案数。

考虑递推:

\[\begin{align} f_{x}&=2\times (f_{x-1}+g_{x-1})+\sum_{1\le i< x-1}(f_{i}+g_{i})(f_{x-1-i}+g_{x-1-i})\\ g_{x}&=2\times f_{x}+\sum_{1\le i<x}f_{i}f_{x-i} \end{align} \]

发现是卷积形式。

我们不妨用生成函数来表示它们。

\[\begin{align} F(x)&=x+2x(F(x)+G(x))+x(F(x)+G(x))^2\\ G(x)&=2F(x)+F(x)^2 \end{align} \]

把 \(G\) 代入 \(F\)。

\[\begin{align} F(x)&=x(F(x)+G(x)+1)^2\\ &=x(F(x)^2+3F(x)+1)^2\\ \end{align} \]

由于我们要求第 \(n\) 次项系数,可以用拉格朗日反演提取。

令:

\[\begin{align} H(F(x))&=x\\ &=\frac{F(x)}{(F(x)^2+3F(x)+1)^2}\\ &=\frac{x}{(x^2+3x+1)^2}\\ \end{align} \]

所以:

\[\begin{align} [x^n]F(x)&=\frac{1}{n}[x^{n-1}](\frac{x}{H(x)})^n\\ &=\frac{1}{n}[x^{n-1}](x^2+3x+1)^{2n} \end{align} \]

然后有两种方法。

第一种直接组合数展开。

\[\begin{align} [x^n]F(x)&=\frac{1}{n}[x^{n-1}](x^2+3x+1)^{2n}\\ &=\frac{1}{n}\sum_{i=0}^{n-1}[(n-i-1)\bmod 2=0]3^{i}\binom{2n}{i,\frac{n-i-1}{2},2n-i-\frac{n-i-1}{2}}\\ \end{align} \]

还有第二种方法。

因为这个函数是 D-finite 的,所以也可以求出递推式。

令 \(L(x)=(x^2+3x+1)^{2n}\)。

有:

\[\begin{align} L'(x)&=(2x+3)2n(x^2+3x+1)^{2n-1}\\ &=\frac{(2x+3)2nL(x)}{x^2+3x+1}\\ (x^2+3x+1)L'(x)&=(2x+3)2nL(x) \end{align} \]

对比系数:

\[\begin{align} [x^k]L'(x)+3[x^{k-1}]L'(x)+[x^{k-2}]L'(x)&=6nL_k+4nL_{k-1}\\ (k+1)L_{k+1}+3kL_{k}+(k-1)L_{k-1}&=6nL_{k}+4nL_{k-1}\\ (k+1)L_{k+1}&=(6n-3k)L_{k}+(4n-k+1)L_{k-1} \end{align} \]

其中:\(L_{0}=1,L_{1}=6n\)。

直接递推即可。

时间复杂度:\(O(n)\)。

Code

#include <bits/stdc++.h>
using namespace std;

const int mod = 998244353;

int n;
int v[10000010];

int main() {
  cin >> n;
  long long f0 = 1, f1 = 6 * n, f2;
  v[0] = v[1] = 1;
  for (int i = 2; i <= n; i++)
    v[i] = 1ll * (mod - mod / i) * v[mod % i] % mod;
  for (int i = 1; i < n - 1; i++) {
    f2 = ((6 * n - 3 * i) * f1 + (4 * n - i + 1) * f0) % mod * v[i + 1] % mod;
    f0 = f1;
    f1 = f2;
  }
  f0 = 1ll * f0 * v[n] % mod;
  f1 = 1ll * f1 * v[n] % mod;
  f2 = 1ll * f2 * v[n] % mod;
  cout << (n == 1 ? f0 : (n == 2 ? f1 : f2)) << "\n";
}

标签:Beautiful,Binary,begin,3x,frac,题解,align,end,2n
From: https://www.cnblogs.com/JiaY19/p/18459809

相关文章

  • 题解 QOJ5048【[ECFinal19K] All Pair Maximum Flow】
    题目描述给你一个\(n\)个点\(m\)条边的图,它是平面上的正\(n\)边形和一些对角线,节点按逆时针方向编号为\(1\)到\(n\)。对角线只可能在节点处相交。每条边有一个容量,求每个点对之间的最大流的和。\(n\leq200000,m\leq400000\)。solution做法每次找出边权最小的边\(......
  • 蓝桥杯真题 穿越时空之门(第十五届蓝桥杯省赛PythonB组A题) c++题解
    问题如下(附链接):穿越时空之门题解代码如下:#include<iostream>usingnamespacestd;intx1(inti){inta=0;while(i){a+=i%2;i/=2;}returna;}intx2(inti){intb=0;while(i){b+=i%4;i/=4;}returnb;}intmain()......
  • 线段树分治略解&杂题解析
    可能做到好题之后会再更新吧。总叙线段树与离线询问结合技巧又被称为线段树分治。使用线段树分治维护的信息通常会在某一个时间段内出现,要求在离线的前提下回答某一个时刻的信息并,则可以考虑使用线段树分治的技巧。以下是线段树分治的基本模板:change将信息按时间段覆盖在线......
  • [USACO23FEB] Hungry Cow P 题解
    T7[USACO23FEB]HungryCowP这题就比较正常了,蓝紫之间的水平。我们发现Bessie能活\(10^{14}\)天(,导致我们不好直接按照值域来维护。发现给某一天送干草,影响到的是后面很多天,这是个区间问题。所以考虑动态开点线段树。线段树的每个节点维护\(\mathit{ans},\mathit{cnt},\ma......
  • csp-s真题题解
    csp题目讲解P8818[CSP-S2022]策略游戏学习笔记感觉非常复杂?对于现在的我还是有深度的,首先第一个大坑就是并不需要真的求出c矩阵,这个题意就是让你在区间中选数,但要求乘积最大,所以要分讨。你假定\(a_i\ge0\),那这时如果\(min(b_i)\ge0\)取\(max(a_i)\),否则取\(min(a_i\ge......
  • P3959 [NOIP2017 提高组] 宝藏 题解
    P3959[NOIP2017提高组]宝藏题解搜索魅力时刻怎么说,四种做法比较??的模拟退火跑得快但是正确性有问题的状压DP跑得慢但是一定正确的状压DP时间复杂度很玄学的DFS+剪枝我就选择了搜索的做法先打个暴搜,70pts点击查看暴搜代码#include<bits/stdc++.h>usingna......
  • 有关 OneDrive 中 Copilot 的常见问题解答
    很多小伙伴已经用上了OneDrive中的Copilot功能:Copilot重磅更新!OneDrive全新功能炸裂一个技巧实现在SharePoint中使用Copilot针对大家提问比较多的问题,在此做一个汇总:1、OneDrive中的Copilot目前在哪里可用?OneDrive中的Copilot目前在 OneDriveWeb上仅适用于商......
  • P5547 [BJ United Round #3] 三色树 题解
    Description请你对满足以下要求的\(n\)个节点的无标号无根树计数:每个节点是三种颜色之一:红,蓝,黄红色节点度数不超过\(4\),蓝色和黄色节点度数均不超过\(3\)黄色节点不能相邻注意无标号无根树的意义是:如果两颗树可以通过重新编号的方法使得对应点颜色相同,对应连边一致......
  • 颠倒原理题解
    颠倒原理/reverse时间限制:1000ms空间限制:512MB题目描述\(GreenDuck\)想学习转置原理,但由于它太难了,因此他转而学习更为简单的和图的染色有密切联系的“颠倒原理”\((reverseprinciple)\)。颠倒原理中有个重要的操作叫做“颠倒操作”。对于一个无向连通图\(G\),其节点要么......
  • 数据结构题解报告
    [GDOI2016]疯狂动物城对于大多树上区间问题往往加个树剖就能变成普通区间问题,只是说复杂度会加个\(log\),出题人这么做的理由可能是想锻炼一下评测姬吧选手的码力吧。而强制在线只需要可持久化数据结构即可。本题同理可视作区间问题用线段树维护,考虑推式子降次以便于维护\(ans......