[BZOJ5305][Haoi2018]苹果树 组合数
题目描述
小 C 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 C 发现每一天这棵树都会生长出一个新的结点.
第一天的时候, 果树会长出一个根结点, 以后每一天, 果树会随机选择一个当前树中没有长出过结点 的分支, 然后在这个分支上长出一个新结点, 新结点与分支所属的结点之间连接上一条边.
小 C 定义一棵果树的不便度为树上两两结点之间的距离之和, 两个结点之间 的距离定义为从一个点走到另一个点的路径经过的边数.
现在他非常好奇, 如果 NNN 天之后小 G 来他家摘苹果, 这个不便度的期望 EEE 是多少. 但是小 C 讨厌分数, 所以他只想知道E×N!E \times N !E×N! 对 PPP 取模的结果, 可以证明这是一个整数.
输入输出格式
输入格式:
从标准输入中读入数据. 一行两个整数 NNN (N<=2000), PPP .
输出格式:
输出到标准输出中. 输出一个整数表示答案.
输入输出样例
说明

以上是所有 N=3N = 3N=3 时可能的苹果树形态, 其中编号表示这个结点是第几天生 长出来的, 显然每种情况两两结点的距离均为 444 .
考虑n个节点二叉树方案为n!
考虑边的贡献。
设子树大小为sz,则在不考虑编号的情况下经过此边sz*(n-sz)次
方案数为子树内方案*子树外方案。
由于i节点子树内节点编号>i,所以方案为sz!*C(n-i,sz-1)。
子树外方案为i!*(i+1-2)*(i+2-2)*(i+3-2)*......*(n-sz+1-2)。
化简为
i*(i-1)*(n-sz-1)!
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
inline ll read() {
ll x=,f=;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-;
for(;isdigit(ch);ch=getchar()) x=x*+ch-'';
return x*f;
}
ll n,p;
ll jc[],c[][];
int main() {
n=read(),p=read();
c[][]=;
jc[]=;
for(int i=;i<=n;i++) {
c[i][]=;
jc[i]=jc[i-]*i;jc[i]%=p;
for(int j=;j<=i;j++) c[i][j]=(c[i-][j]+c[i-][j-])%p;
}
ll ans=;
for(int i=;i<=n;i++) {
for(int sz=;sz<=n-i+;sz++) {
ans+=sz*(n-sz)*i*(i-)%p*c[n-i][sz-]%p*jc[sz]%p*jc[n-sz-]%p;
ans%=p;
}
}
printf("%lld\n",ans);
}
[BZOJ5305][Haoi2018]苹果树 组合数的更多相关文章
- 洛谷P4492 [HAOI2018]苹果树(组合数)
题意 题目链接 Sol 有点自闭,.我好像对组合数一窍不通(~~~~) Orz shadowice // luogu-judger-enable-o2 #include<bits/stdc++. ...
- BZOJ5305 HAOI2018苹果树(概率期望+动态规划)
每种父亲编号小于儿子编号的有标号二叉树的出现概率是相同的,问题相当于求所有n个点的此种树的所有结点两两距离之和. 设f[n]为答案,g[n]为所有此种树所有结点的深度之和,h[n]为此种树的个数. 枚 ...
- BZOJ5305 [Haoi2018]苹果树 【组合数学】
题目链接 BZOJ5305 题解 妙啊 要求的是所有可能的树形的所有点对距离和 直接考虑点的贡献肯定想不出,这样的所有点对距离问题通常转化为边的贡献 考虑一条边会产生多少贡献 我们枚举\(i\)节点的 ...
- [BZOJ5305][HAOI2018]苹果树(DP)
首先注意到每种树都是等概率出现的,于是将问题转化成计数求和问题. f[n]表示所有n个点的树的两两点距离和的总和. g[n]表示所有n个点的树的所有点到根的距离和的总和. h[n]表示n个点的树的可能 ...
- Luogu 4492 [HAOI2018]苹果树 组合数
https://www.luogu.org/problemnew/show/P4492 找每个编号的点的父边的贡献,组合数和阶乘就能算了. 我考场上怎么就是没想到呢. 调了好久好久好久好久调不出来,样 ...
- [BZOJ5305][HAOI2018]苹果树 组合数学
链接 小 C 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 C 发现每一天这棵树都会生长出一个新的结点. 第一天的时候, 果树会长出一个根结点, 以后每一天, ...
- [BZOJ5305] [HAOI2018] 苹果树 数学 组合计数
Summary 题意很清楚: 小 \(C\) 在自己家的花园里种了一棵苹果树, 树上每个结点都有恰好两个分支. 经过细心的观察, 小 \(C\) 发现每一天这棵树都会生长出一个新的结点. 第一天的时候 ...
- BZOJ5305: [HAOI2018]苹果树
传送门 果然只有我这种菜鸡才会用这种菜鸡做法QwQ 对于一类要求期望的题目,有一个无脑的做法: 设概率为 \(f\),期望为 \(g\) 每次合并两个二元组 \(<f_1,g_1>,< ...
- 【BZOJ5305】[HAOI2018]苹果树(组合计数)
[BZOJ5305][HAOI2018]苹果树(组合计数) 题面 BZOJ 洛谷 题解 考虑对于每条边计算贡献.每条边的贡献是\(size*(n-size)\). 对于某个点\(u\),如果它有一棵大 ...
随机推荐
- js正则:两边字符固定,中间任意字符
求些一个js正则!两边字符固定,中间任意字符.在一个长字符串里面匹配一小段,这一小段字符串开头和结尾都是固定的字符,就是中间是任意长度的字符.怎么写? /aa.+aa/ aa是你的固定字符,如果是反斜 ...
- Apple Tree POJ - 3321 dfs序列构造树状数组(好题)
There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree. ...
- zabbix调优PPT
http://www.slideshare.net/xsbr/alexei-vladishev-zabbixperformancetuning# http://zabbixzone.com/zabbi ...
- POJ 2976 二分
Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12515 Accepted: 4387 D ...
- mysql连接时权限问题 用户问题
启动工程时会连接mysql数据库,此时报错: ERROR 1044 (42000): Access denied for user 'pay'@'localhost' to database 'pay ...
- java通过各种类型驱动连接数据库
常见数据库驱动实现类:JDBC-ODBC:sun.jdbc.odbc.JdbcOdbcDriver Oracle:oracle.jdbc.driver.OracleDriver MySQL:com.m ...
- session验证-使用filter过滤器
public override void OnActionExecuting(ActionExecutingContext context) { string test = context.Contr ...
- 天气预报service
https://weather.com/ https://api.weather.com/v2/turbo/vt1dailyForecast?apiKey=c1ea9f47f6a88b9acb43ab ...
- 当你启动Redis的时候,Redis做了什么
直奔主题,当启动Redis的时候,Redis执行了哪些操作? 假设Redis安装在了/usr/local/目录下,那么启动Redis是通过执行/usr/local/bin/redis-server - ...
- css文本垂直水平居中
一.单行文本居中 .content{ height:100px; line-height:100px; text-align:center; border:1px solid red; } 效果图 二 ...