首先有个很奇妙而且很有用的性质:每个二叉树对应唯一的中序遍历,然后每个二叉树出现概率相同。所以n个节点的二叉树形态是n!种(题目中说了*n!已经是提示了),对每种方案求和即可得到期望。令f[i]表示i个节点的子树,根深度为1时,所有点的期望深度之和乘i!的值,令g[i]表示i个节点的子树,期望两两路径之和乘i!的值。

然后得到f[i]=i*i!+ΣC(i-1,L)(f[L]*R!+f[R]*L!),g[i]=ΣC(i-1,L)(g[L]*R!+g[R]*L!+f[L]*R!*(R+1)+f[R]*L!*(L+1)),其中0<=L<i,L、R为左/右子树大小,只需要枚举L即可(因为R=i-1-L),复杂度O(n2)

这题这么水的吗qwq?其实当模数做NTT时,貌似可以分治NTT优化O(nlog2n),反正我不会就不管了。

#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,mod,c[N][N],fac[N],f[N],g[N];
int main()
{
scanf("%d%d",&n,&mod);
fac[]=c[][]=;
for(int i=;i<=n;i++)
{
c[i][]=,fac[i]=1ll*fac[i-]*i%mod;
for(int j=;j<=i;j++)c[i][j]=(c[i-][j-]+c[i-][j])%mod;
}
f[]=;
for(int i=;i<=n;i++)
{
for(int L=;L<i;L++)
{
int R=i--L,F,G;
F=(1ll*f[L]*fac[R]+1ll*f[R]*fac[L])%mod;
G=(1ll*f[L]*fac[R]%mod*(R+)+1ll*f[R]*fac[L]%mod*(L+)+1ll*g[L]*fac[R]+1ll*g[R]*fac[L])%mod;
f[i]=(f[i]+1ll*F*c[i-][L])%mod;
g[i]=(g[i]+1ll*G*c[i-][L])%mod;
}
f[i]=(f[i]+1ll*i*fac[i])%mod;
}
printf("%d",g[n]);
}

[HAOI2018]苹果树(组合数学)的更多相关文章

  1. [HAOI2018]苹果树(组合数学,计数)

    [HAOI2018]苹果树 cx巨巨给我的大火题. 感觉这题和上次考试gcz讲的那道有标号树的形态(不记顺序)计数问题很类似. 考虑如果对每个点对它算有贡献的其他点很麻烦,不知怎么下手.这个时候就想到 ...

  2. [BZOJ5305][HAOI2018]苹果树 组合数学

    链接 小 C 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 C 发现每一天这棵树都会生长出一个新的结点. 第一天的时候, 果树会长出一个根结点, 以后每一天, ...

  3. 【BZOJ5305】[HAOI2018]苹果树(组合计数)

    [BZOJ5305][HAOI2018]苹果树(组合计数) 题面 BZOJ 洛谷 题解 考虑对于每条边计算贡献.每条边的贡献是\(size*(n-size)\). 对于某个点\(u\),如果它有一棵大 ...

  4. [洛谷P4492] [HAOI2018]苹果树

    洛谷题目链接:[HAOI2018]苹果树 题目背景 HAOI2018 Round2 第一题 题目描述 小 C 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 C ...

  5. BZOJ5305 [Haoi2018]苹果树 【组合数学】

    题目链接 BZOJ5305 题解 妙啊 要求的是所有可能的树形的所有点对距离和 直接考虑点的贡献肯定想不出,这样的所有点对距离问题通常转化为边的贡献 考虑一条边会产生多少贡献 我们枚举\(i\)节点的 ...

  6. [BZOJ5305][Haoi2018]苹果树 组合数

    题目描述 小 C 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 C 发现每一天这棵树都会生长出一个新的结点. 第一天的时候, 果树会长出一个根结点, 以后每一 ...

  7. [BZOJ5305] [HAOI2018] 苹果树 数学 组合计数

    Summary 题意很清楚: 小 \(C\) 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 \(C\) 发现每一天这棵树都会生长出一个新的结点. 第一天的时候 ...

  8. Luogu4492 [HAOI2018]苹果树 【动态规划】

    题目分析: 思路不难想,考虑三个dp状态$f,g,d$. $g[i]$表示有$i$个点的堆的数量 $d[i]$表示有$i$个点的情况下所有的方案数中点到根的距离和 $f[i]$表示要求的答案. 不难发 ...

  9. HAOI2018苹果树

    题解 首先所有生成树的情况树是\(n!\)的,因为第一次有1中方法,第二次有两种放法,以此类推... 然后我们发现距离这种东西可以直接枚举每条边算贡献. 于是我们枚举了一个点\(i\),又枚举了这个点 ...

随机推荐

  1. Django template配置

    TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join( ...

  2. HDU 5280 BestCoder Round #47 1001:Senior's Array

    Senior's Array  Accepts: 199  Submissions: 944  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit ...

  3. Scrapy的学习和使用

    1.安装 在windows下安装是真心复杂,不搞了,直接在linux下研究吧! sudo pip install scrapy 2.安装遇到问题 2.1.bz2 module not availabl ...

  4. 005、mysql查询表的结构

    EXPLAIN hcc_ip 如果有一个表,表明为hcc_ip,使用以上语句可以得到下图 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:38247724 ...

  5. 关于mybatis的<selectKey>中的keyColumn

    <mapper namespace="com.dao.EmployeeDao"> <insert id="insert"> <se ...

  6. PAT 2018 春

    A 1140 Look-and-say Sequence 简单模拟.可能要注意字符串第一个字符和最后一个字符的处理. #include <cstdio> #include <iost ...

  7. jQuery.ajax提交JSON数据

    $.ajax({ type: 'POST', url: "URL", contentType:'application/json', //需要加contentType crossD ...

  8. group_concat用法以及字符串太长显示不全

    由于group_concat默认的长度是1024,所以要将最大长度修改 首先执行 SET SESSION group_concat_max_len = 10240;#一次查询有效 然后再进行拼接 se ...

  9. Vue-router(4)之路由跳转

    路由传参 案例:现在需要展示一个电影列表页,点击每一部电影,会跳转到该部电影详情页(跳转时携带type和id) 代码实现(未携带type): index.js import Vue from 'vue ...

  10. 干货 | TiDB Operator实践

    干货 | TiDB Operator实践 北京it爷们儿 京东云开发者社区  4天前 K8s和TiDB都是目前开源社区中活跃的开源产品,TiDB Operator项目是一个在K8s上编排管理TiDB集 ...