正题

题目链接:https://www.luogu.com.cn/problem/P4492


题目大意

开始有一个节点,第iii次在一个儿子不超过222的节点下面长出一个新儿子编号为iii。求所有方案下树的路径长度和。


解题思路

考虑计算每条边的贡献,设gig_igi​表示大小为iii的树的形态个数,fif_ifi​表示所有大小为iii的树的路径长度和。然后题目给出的要求就是子节点编号比父节点大。

那么ggg有转移gi+1=∑j=0igjgi−jCijg_{i+1}=\sum_{j=0}^ig_jg_{i-j}C_{i}^jgi+1​=j=0∑i​gj​gi−j​Cij​
fff的转移复杂一点,枚举子树大小jjj和i−ji-ji−j,那么子树jjj自己的贡献就是gj∗j∗(n−j)g_j*j*(n-j)gj​∗j∗(n−j),然后要乘上gi−jg_{i-j}gi−j​表示每种左子树形态对应的树的形态个数。右边i−ji-ji−j同理,就有转移方程fi+1=∑j=0i(gigj(j∗(n−j)+(i−j)∗(n−i+j))+fj∗gi−j+fi−j∗gj)∗Cijf_{i+1}=\sum_{j=0}^i(\ g_ig_j(j*(n-j)+(i-j)*(n-i+j))+f_j*g_{i-j}+f_{i-j}*g_j\ )*C_{i}^jfi+1​=j=0∑i​( gi​gj​(j∗(n−j)+(i−j)∗(n−i+j))+fj​∗gi−j​+fi−j​∗gj​ )∗Cij​

时间复杂度O(n2)O(n^2)O(n2)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2100;
ll n,p,f[N],g[N],c[N][N];
int main()
{scanf("%lld%lld",&n,&p);g[0]=c[0][0]=1;for(ll i=1;i<=n;i++)for(ll j=0;j<=i;j++)c[i][j]=((j?c[i-1][j-1]:0)+c[i-1][j])%p;for(ll i=0;i<n;i++){for(ll j=0;j<=i;j++){(g[i+1]+=g[j]*g[i-j]%p*c[i][j])%=p;(f[i+1]+=(((i-j)*(n-i+j)%p+j*(n-j)%p)*g[j]%p*g[i-j]%p+f[j]*g[i-j]%p+f[i-j]*g[j]%p)%p*c[i][j]%p)%=p;}}printf("%lld\n",f[n]);return 0;
}

P4492-[HAOI2018]苹果树【dp】相关推荐

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

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

  2. P4492 [HAOI2018]苹果树(组合数学+递推)

    LINK 一颗苹果树长 n n n天,第一天长出根节点,每个节点有左右两个分支 以后每一天,在这棵树的所有分支处随机选择一个,长出一个新节点 定义这个树的不便度为树上两两节点的距离和 E E E,输出 ...

  3. 【组合数学-DP】BZOJ5305 [HAOI2018] 苹果树

    [题目] lydsy 一棵果树每个节点恰好有两个分支,初始只有一个根节点,每天果树会随机选择一个当前没有长出过节点的分支长出节点.求 n n n天后期望树点对之间距离和 E E E,输出 E × n ...

  4. [HAOI2018]苹果树 组合数学

    [HAOI2018] 基础组合数学 Code #include<bits/stdc++.h> #define rep(i,a,b) for(ll i=(a);i<=(b);i++) ...

  5. [HAOI2018]苹果树(组合数学)

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

  6. bzoj5305 [Haoi2018]苹果树(组合数学)

    首先n个点的这样生成的二叉树有n!种. 因此这就不再是一个期望问题,而是计数问题! 可能没逆元,烦躁qaq 考虑给每个点按生成顺序标号,我们来计算i->fa[i]这条边对答案的贡献. 我们枚举i ...

  7. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  8. mysql数据库字段类型大全_mysql数据库字段类型详解

    MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述. ...

  9. c语言oj答案进制转换,C语言编程的进制问题问题

    在我们的编译器,我用的是ADS   开发平台,现在RTC模块编程时,2410作为上位机,如下代码: n = rBCDDATE; if(n==1) time->day =0x31 ; 波斯历的日期 ...

  10. yyb省选前的一些计划

    突然意识到有一些题目的计划,才可以减少大量查水表或者找题目的时间. 所以我决定这样子处理. 按照这个链接慢慢做. 当然不可能只做省选题了. 需要适时候夹杂一些其他的题目. 比如\(agc/arc/cf ...

最新文章

  1. boost::ratio_equal相关的测试程序
  2. 腾讯大数据高级产品总监洪桃李:决胜未来的4大关键能力
  3. 微服务监控zipkin、skywalking以及日志ELK监控系列
  4. 445端口 mysql_关于如何关闭window端口445的详细介绍
  5. oracle多表查询while,oracle while的用法示例分享
  6. excel导入到mysql
  7. NLP学习难在哪里?这份最全NLP学习路线图帮你解决难题!
  8. Linux文档备份工具,推荐8款免费Linux备份工具
  9. webstorm破解方法
  10. 2021年中国气体分离设备行业运营情况分析:气体分离及液化设备产量14.85万台[图]
  11. 计算机电脑设置音量,电脑声卡设置步骤【图文教程】
  12. 折腾开源WRT的AC无线路由之路-3
  13. Github详细教程
  14. 本周大新闻|苹果MR已进行Pre-EVT测试,Quest 2涨价100美元
  15. 前端开发:webstorm永久破解
  16. oracle修改open_cursors,oracle open_cursors
  17. 这些前后端性能指标,面试一问我就懵了
  18. Eclipse从本地压缩包安装插件
  19. 这是一篇让你少走弯路的 JNI/NDK 实例教程(转)
  20. WPF开发一款软件自动升级组件

热门文章

  1. oracle+11g+rda,Oracle RDA 4.20 初体验
  2. .md是什么文件_Element-UI源码阅读之md显示到页面
  3. php acl rbac,建站常用的用户权限管理模型ACL和RBAC的区别
  4. 未发现android设备,Brother iPrintScan 应用程序上出现错误信息“未发现支持设备”(Android™ 智能手机)。...
  5. 三菱plc选型手册_模拟量是什么?PLC和模拟量是如何转换的?
  6. 软件构造学习笔记-第二周
  7. 一条SQL语句的执行过程
  8. 7-3 银行家算法--综合 (50 分)(思路+详解+分析输入)宝宝们 加油
  9. [Java基础]反射获取成员方法并使用练习
  10. 高等数学下-赵立军-北京大学出版社-题解-练习12.1