题解 \(by\;zj\varphi\)

一道概率与期望好题

对于一棵树,去掉根后所有子树就是一个森林,同理,一个森林加一个根就是一棵树

设 \(f_{i,j}\) 为有 \(i\) 个点的树,高度为 \(j\) 的期望,那么 \(f_{i,j}=g_{i-1,j-1}\) 其中 \(g_{i,j}\) 表示有 \(i\) 个点的森林深度为 \(j\) 的概率

一个森林也可以看成是一棵树加上一个森林

至于 \(g\),\(g_{i,j}=\sum_{k=1}^{i}f_{k,j}g_{i-k,j}dp_{i,k}\) 其中 \(dp_{i,k}\) 就是一个有 \(i\) 个点的森林,有 \(k\) 个构成了一棵树

Code
#include<bits/stdc++.h>
#define ri register int
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
template<typename T>inline void read(T &x) {
ri f=1;x=0;register char ch=gc();
while(ch<'0'||ch>'9') {if (ch=='-') f=0;ch=gc();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
x=f?x:-x;
}
}
using IO::read;
namespace nanfeng{
// #define int long long
#define FI FILE *IN
#define FO FILE *OUT
template<typename T>inline T cmax(T x,T y) {return x>y?x:y;}
template<typename T>inline T cmin(T x,T y) {return x>y?y:x;}
typedef long long ll;
static const int N=220;
int dp[N][N],f[N][N],g[N][N],inv[N],n,p,ans;
inline int fpow(int x,int y) {
ri res=1;
while(y) {
if (y&1) res=(ll)res*(ll)x%p;
x=(ll)x*x%p;y>>=1;
}
return res;
}
inline int main() {
// FI=freopen("nanfeng.in","r",stdin);
// FO=freopen("nanfeng.out","w",stdout);
read(n),read(p);
for (ri i(2);i<=n;p(i)) inv[i]=fpow(i,p-2);
dp[1][0]=dp[1][1]=1;
for (ri i(2);i<=n;p(i)) {
for (ri j(1);j<=i;p(j)) {
dp[i][j]=(ll)dp[i-1][j-1]*(j-1)%p*inv[i]%p+(ll)dp[i-1][j]*(i-j)%p*inv[i]%p;
dp[i][j]%=p;
}
}
for (ri i(0);i<=n;p(i)) f[0][i]=g[0][i]=1;
for (ri i(1);i<=n;p(i))
for (ri j(i-1);j<n;p(j)) f[i][j]=g[i][j]=1;
for (ri i(2);i<=n;p(i)) {
for (ri j(0);j<i-1;p(j)) {
if (j) f[i][j]=g[i-1][j-1];
for (ri k(1);k<=i;p(k)) {
g[i][j]+=(ll)f[k][j]*g[i-k][j]%p*dp[i][k]%p;
g[i][j]%=p;
}
}
}
for (ri i(1);i<n;p(i)) ans+=(ll)i*((f[n][i]-f[n][i-1]+p)%p)%p,ans%=p;
printf("%d\n",ans);
return 0;
}
}
int main() {return nanfeng::main();}

NOIP 模拟 $20\; \rm 玩具$的更多相关文章

  1. NOIP 模拟 $20\; \rm y$

    题解 \(by\;zj\varphi\) 首先发现一共最多只有 \(2^d\) 种道路,那么可以状压,(不要 \(dfs\),会搜索过多无用的状态) 那么设 \(f_{i,j,k}\) 为走 \(i\ ...

  2. NOIP 模拟 $20\; \rm z$

    题解 很考验思维的一道题 对于不同的任务点,发现如果 \(x_{i-1}<x_i<x_{i+1}\) 或 \(x_{i-1}>x_i>x_{i+1}\) 那么 \(x_i\) ...

  3. 7.22 NOIP模拟7

    又是炸掉的一次考试 T1.方程的解 本次考试最容易骗分的一道题,但是由于T2花的时间太多,我竟然连a+b=c都没判..暴力掉了40分. 首先a+b=c,只有一组解. 然后是a=1,b=1,答案是c-1 ...

  4. NOIP模拟 1

    NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. #   用  户  名   ...

  5. 20190725 NOIP模拟8

    今天起来就是虚的一批,然后7.15开始考试,整个前半个小时异常的困,然后一看题,T1一眼就看出了是KMP,但是完了,自己KMP的打法忘的一干二净,然后开始打T2,T2肝了一个tarjan点双就扔上去了 ...

  6. 20190902+0903合集-NOIP模拟

    一直没时间写QwQ 于是补一下. Day 1 晚饭吃的有点恶心…… $1s\,2s\,5s$ 还开 -O2 ?? 有点恐怖. T1 猛的一想: 把外面设成一个点, 向入口连一条权为排队时间的边 从出口 ...

  7. 2021.5.22 noip模拟1

    这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照 ...

  8. NOIP 模拟 $16\; \rm Lost My Music$

    题解 \(by\;zj\varphi\) 一道凸包的题 设 \(\rm dep_u\) 表示节点 \(u\) 的深度,那么原式就可化为 \(-\frac{c_v-c_u}{dep_v-dep_u}\) ...

  9. 道路 [NOIP模拟]

    Description 我们看见了一个由 m 行 n 列的 1*1 的格子组成的矩阵,每个格子(I,j)有对应的高度 h[i][j]和初始的一个非负权值 v[i][j].我们可以随便选择一个格子作为起 ...

随机推荐

  1. buu Youngter-drive

    一.查壳,发现是upx的壳,用自解压方式,脱下壳 二.之后发现打不开了,应该是要修复,不想修复了,直接拖入ida 找到关键函数,中间发生一点小插曲,发现堆栈不平衡,然后导致F5反编译失败,百度了下是A ...

  2. ZYNQ 中PS端GPIO EMIO使用

    ZYNQ 中PS端GPIO EMIO使用 在使用ZYNQ进行开发设计时,往往需要对一些GPIO引脚进行配置,传统的配置方法通常在PL端进行管脚约束之后在Verilog代码中对相应引脚进行配置.这样如果 ...

  3. STM32中STD、HAL、LL库比较

    ST为开发者提供了标准外设库(STD库).HAL库.LL库 三种.前两者都是常用的库,后面的LL库是ST新添加的,随HAL源码包一起提供,目前支持的芯片也偏少. 标准外设库(Standard Peri ...

  4. python 交换变量的值 不需要借助第三个变量

    >>> a,b,c,d=1,2,3,4>>> a,b,c,d=d,c,b,a>>> print(a,b,c,d)4 3 2 1>>&g ...

  5. 牛客OI测试赛1

    题目链接: https://www.nowcoder.com/acm/contest/181#question A.斐波拉契 求$f[n-1]*f[n+1]-f[n]^2$,$f[n]$为斐波拉契数列 ...

  6. Spring总结之AOP

    一.Spring AOP简介(百度百科) 面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),是软件开发中的一个热点,也是 Spring 框架中的一个重 ...

  7. 01_Nginx下载安装

    一.简介 Nginx 是由俄罗斯人 Igor Sysoev 设计开发的,开发工作从2002 年开始,第一次公开发布在 2004 年 10 月 4 日. 官方网站为:http://nginx.org/ ...

  8. SourceTree 3.1.3版本跳过注册

    1.进入文件夹 %LocalAppData%\Atlassian\SourceTree\ 找到SourceTree的目录 2.里面添加一个json文件 accounts.json 内容如下: [{&q ...

  9. js学习笔记之日期倒计时DOM操作

    1.访问html元素 getElementById() 方法  返回对拥有指定 id 的第一个对象的引用,只有dom对象有效 getElementsByName() 方法  返回指定名称的对象集合 g ...

  10. U 跳转中加入变量参数的写法

    href="{:U('Message/news?id='.$vo['messageid'].'')}" 就是在U方法里如果参数是变量就用 '.$i.'代替 {$i} <a h ...