[ABC222H] Beautiful Binary Tree 题解

第一次写拉格朗日反演。

思路#

考虑如何操作。

发现出根节点外有 n1 个点是一。

由于我们只能操作 n1 次,相当于每一次操作必须把两个一合并。

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

考虑设 fi 表示当前节点为一并且整个子树总和为 i 的方案数,gi 表示当前节点为零并且整个子树总和为 i 的方案数。

考虑递推:

(1)fx=2×(fx1+gx1)+1i<x1(fi+gi)(fx1i+gx1i)(2)gx=2×fx+1i<xfifxi

发现是卷积形式。

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

(3)F(x)=x+2x(F(x)+G(x))+x(F(x)+G(x))2(4)G(x)=2F(x)+F(x)2

G 代入 F

(5)F(x)=x(F(x)+G(x)+1)2(6)=x(F(x)2+3F(x)+1)2

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

令:

(7)H(F(x))=x(8)=F(x)(F(x)2+3F(x)+1)2(9)=x(x2+3x+1)2

所以:

(10)[xn]F(x)=1n[xn1](xH(x))n(11)=1n[xn1](x2+3x+1)2n

然后有两种方法。

第一种直接组合数展开。

(12)[xn]F(x)=1n[xn1](x2+3x+1)2n(13)=1ni=0n1[(ni1)mod2=0]3i(2ni,ni12,2nini12)

还有第二种方法。

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

L(x)=(x2+3x+1)2n

有:

(14)L(x)=(2x+3)2n(x2+3x+1)2n1(15)=(2x+3)2nL(x)x2+3x+1(16)(x2+3x+1)L(x)=(2x+3)2nL(x)

对比系数:

(17)[xk]L(x)+3[xk1]L(x)+[xk2]L(x)=6nLk+4nLk1(18)(k+1)Lk+1+3kLk+(k1)Lk1=6nLk+4nLk1(19)(k+1)Lk+1=(6n3k)Lk+(4nk+1)Lk1

其中:L0=1,L1=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";
}

作者:JiaY19

出处:https://www.cnblogs.com/JiaY19/p/18459809

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   JiaY19  阅读(7)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示