思路

题目要求的其实就是每种方案的权值之和(因为每种方案的概率相等)

所以自然想到要求所有的边对最终答案的贡献次数

考虑这一条边被经过了多少次,有这个子树内的点数*子树外的点数次,即\(k\times(n-k)\)

然后考虑总共的中序遍历总共有\(n!\)种,每种方案等概率

先钦定一个点\(i\)(乘上\(i!\)),然后枚举它的\(sz\),这样相当于枚举了每种生成的树的形态,做到了不重不漏

对于这个点\(i\),考虑选择K个点作为它的子树进行统计(\(sz_i=K+1\)),然后选择的k个点的方案数是\(\left(\begin{matrix}n-i\\K\end{matrix}\right)\),这\(K\)个点能构成的树的形态总数有\(K!\)个,然后考虑剩下的\(n-k-i\)个点的分配方案,因为不能放在\(i\)的子树中,所以分配的方案有\((i-1)(i)\dots(n-K-2)\)种(\(n-K-2\)因为只剩一个点,能选择\(n-sz_i-1=n-K-2\)个点),化简一下等于\(\frac{(n-k-2)!}{(i-2)!}\)

然后式子就出来了(注意i从二开始,因为从1开始似乎没有什么意义)

\[\begin{align}ans=&\sum_{i=2}^ni!\sum_{j=1}^{n-i+1}j!\left(\begin{matrix}n-i\\j-1\end{matrix}\right)\frac{(n-j-1)!}{(i-2)!}j(n-j)\\=&\sum_{i=2}^n\sum_{j=1}^{n-i+1}j!\left(\begin{matrix}n-i\\j-1\end{matrix}\right)(n-j-1)!(i-1)ij(n-j)\end{align}
\]

然后就很可做了

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
int n,p,C[2010][2010],jc[2010],ans=0;
signed main(){
scanf("%d %d",&n,&p);
jc[0]=1;
for(int i=1;i<=n;i++)
jc[i]=(jc[i-1]*i)%p;
C[0][0]=1;
for(int i=1;i<=n;i++)
C[i][0]=C[i][i]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<i;j++)
C[i][j]=(C[i-1][j-1]+C[i-1][j])%p;
for(int i=2;i<=n;i++)
for(int j=1;j<=n-i+1;j++)
ans=(ans+jc[j]*C[n-i][j-1]%p*jc[n-j-1]%p*(i-1)%p*i%p*j%p*(n-j)%p+p)%p;
printf("%d\n",ans);
return 0;
}

P4492 [HAOI2018]苹果树的更多相关文章

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

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

  2. 洛谷P4492 [HAOI2018]苹果树(组合数)

    题意 题目链接 Sol 有点自闭,.我好像对组合数一窍不通(~~~~) Orz shadowice // luogu-judger-enable-o2 #include<bits/stdc++. ...

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

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

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

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

  5. 题解 洛谷 P4492 【[HAOI2018]苹果树】

    考虑生成一颗二叉树的过程,加入第一个节点方案数为\(1\),加入第二个节点方案数为\(2\),加入第三个节点方案数为\(3\),发现生成一颗\(n\)个节点的二叉树的方案数为\(n!\). 所以题目中 ...

  6. Luogu 4492 [HAOI2018]苹果树 组合数

    https://www.luogu.org/problemnew/show/P4492 找每个编号的点的父边的贡献,组合数和阶乘就能算了. 我考场上怎么就是没想到呢. 调了好久好久好久好久调不出来,样 ...

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

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

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

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

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

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

随机推荐

  1. hdu5064 DLX可重复覆盖+二分

    这题题意是 给了n个城市 在其中小于等于k个城市建立机场然后 使得最远的那个离机场的城市距离最短 二分答案 ,我们对于每次的mid 重新建图然后再来一次DLX,每个点可以覆盖的点建立一条联系就ok了 ...

  2. [openjudge-动态规划]怪盗基德的滑翔翼

    题目描述 描述 怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯.而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼. 有一天 ...

  3. QScrollBar & QSlider & QDial

    [1]滚动条 & 滑块 & 表盘 Qt示例工程: (1)slidergroup.h #include <QGroupBox> QT_BEGIN_NAMESPACE clas ...

  4. SQL Server 配置管理器

  5. 大数据是什么?它和Hadoop又有什么联系?

    随着近几年计算机技术和互联网的发展,“大数据”这个名词越来越多进入我们的视野.大数据的快速发展也在无时无刻影响着我们的生活. 那大数据究竟是什么呢? 首先,看看专家是怎么解释大数据的: 大数据就是多, ...

  6. Node.js中环境变量process.env详解

    Node.js中环境变量process.env详解process | Node.js API 文档http://nodejs.cn/api/process.html官方解释:process 对象是一个 ...

  7. spring 线程安全

    http://www.cnblogs.com/doit8791/p/4093808.html 写的真的好

  8. Porsche Piwis II V14. three hundred and fifty computer software Tester II

    Porsche piwis tester 2 Help Devices: SERP automatio tranny, air-conditioner, SRS, ABDOMINAL MUSCLES, ...

  9. 018.07 New BMW ICOM A3+B+C+D Plus EVG7 Controller Tablet PC with WIFI Function

    2018.07 New BMW ICOM A3+B+C+D Plus EVG7  Controller Tablet PC with WIFI Function Software Version : ...

  10. 自学Java第七周的总结

    这一周里我将看过的知识点又复习了一遍,下个星期打算将题做一遍