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

题面

BZOJ

洛谷

题解

考虑对于每条边计算贡献。每条边的贡献是\(size*(n-size)\)。

对于某个点\(u\),如果它有一棵大小为\(K\)的子树的话,考虑方案数。

首先要从剩下的\(n-u\)个点中选出\(K\)个点作为这棵子树,那么选择方案数是\({n-u\choose K}\),构树的方案数是\(K!\)。除了这些点外,还剩下\(n-u-K\)个点,他们随意的方案数我们这样考虑,首先把选出来的\(K\)个点拿出来,余下的点顺次考虑。因为不能和那\(K\)个点同时放在一棵子树内,因此第\(1\)个点可以选择的方案数是\(u\),下一个是\(u+1\),第\(n-u-K\)个的方案数是\(u+n-u-k-1\),全部乘起来之后方案数就是\(\frac{(n-K-1)!}{(i-1)!}\)。

因此答案就是

\[\sum_{i=1}^ni!*2\sum_{j=1}^{n-i}j*(n-j)*{n-i\choose j}j!*\frac{(n-j-1)!}{(i-1)!}
\]

最后那个除法变成组合数乘阶乘的形式就可以了。

#include<iostream>
#include<cstdio>
using namespace std;
#define MAX 2050
int n,MOD,C[MAX][MAX],jc[MAX],ans;
int main()
{
cin>>n>>MOD;
for(int i=0;i<=n;++i)C[i][0]=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])%MOD;
jc[0]=1;for(int i=1;i<=n;++i)jc[i]=1ll*jc[i-1]*i%MOD;
for(int i=1;i<=n;++i)
for(int j=1;j<=n-i;++j)
ans=(ans+2ll*(n-j)*j*jc[i]%MOD*C[n-i][j]%MOD*jc[j]%MOD*C[n-j-1][i-1]%MOD*jc[n-j-i]%MOD)%MOD;
cout<<ans<<endl;
return 0;
}

【BZOJ5305】[HAOI2018]苹果树(组合计数)的更多相关文章

  1. BZOJ.5305.[HAOI2018]苹果树(组合 计数)

    LOJ BZOJ 洛谷 BZOJ上除了0ms的Rank1啦.明明这题常数很好优化的. 首先,\(n=1\)时有\(2\)个位置放叶子,\(n=2\)时有\(3\)个... 可知\(n\)个点的有标号二 ...

  2. luoguP4492 [HAOI2018]苹果树 组合计数 + dp

    首先,每个二叉树对应着唯一的中序遍历,并且每个二叉树的概率是相同的 这十分的有用 考虑\(dp\)求解 令\(f_i\)表示\(i\)个节点的子树,根的深度为\(1\)时,所有点的期望深度之和(乘\( ...

  3. BZOJ 5305: [Haoi2018]苹果树 组合计数

    一定要注意要乘阶乘,细节很多. code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s ...

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

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

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

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

  6. [BZOJ5305][HAOI2018]苹果树(DP)

    首先注意到每种树都是等概率出现的,于是将问题转化成计数求和问题. f[n]表示所有n个点的树的两两点距离和的总和. g[n]表示所有n个点的树的所有点到根的距离和的总和. h[n]表示n个点的树的可能 ...

  7. BZOJ5305 HAOI2018苹果树(概率期望+动态规划)

    每种父亲编号小于儿子编号的有标号二叉树的出现概率是相同的,问题相当于求所有n个点的此种树的所有结点两两距离之和. 设f[n]为答案,g[n]为所有此种树所有结点的深度之和,h[n]为此种树的个数. 枚 ...

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

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

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

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

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

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

随机推荐

  1. Shell脚本1

    1Shell编程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell脚本 Shell 脚本(shell scr ...

  2. Python之操作redis数据库

    使用redis模块 一.操作redis 1.添加信息 (1)直接建key-value信息: 右键-Add New Key,手动添加key和value 右键-Console,打开控制台,写入命令 (2) ...

  3. 简述nginx(1)

    Nginx能做什么 1.反向代理 2.负载均衡 3.HTTP服务器(包含动静分离) 4.正向代理 反向代理 反向代理应该是Nginx做的最多的一件事了,什么是反向代理呢,以下是百度百科的说法:反向代理 ...

  4. Jmeter之Constant Timer与constant throughput timer的区别(转)

    当放置Constant Timer于两个http请求之间,那么它代表的含义是:在上一个请求发出至完成后, 开始Contant Timer指定的时间,最后再发出第二个请求.它并不是代表两个请求之间的发送 ...

  5. laravel log改为时间格式

    1 providers新建文件 LogRotateServiceProvider.php <?php namespace App\Providers; use Monolog\Formatter ...

  6. [转帖]一段关于Unix与 Linux的暗黑史

    一段关于Unix与 Linux的暗黑史 https://blog.csdn.net/a343315623/article/details/51436715 微软曾经开发过 MS-DOS Xenix O ...

  7. [转帖]Docker的数据管理(volume/bind mount/tmpfs)

    Docker(十五)-Docker的数据管理(volume/bind mount/tmpfs) https://www.cnblogs.com/zhuochong/p/10069719.html do ...

  8. Chrome 浏览器的简单设置 无痕模式 暗黑模式 自定义用户目录

    1. Chrome73 新增加了暗黑模式 可以通过修改快捷方式的方式来默认开启方法如下 1.1 关闭浏览器 2.2 鼠标焦点定位到任务栏 Chrome 图标处, 并且按住shift 按键 执行右键操作 ...

  9. webservice服务的提供及调用完整代码示例

    服务提供方: applicationContext.xml applicationContext-webService.xml  服务调用方:

  10. 日期选择器date、week、time、datetime、datetime-local类型

    下面只写两个类型的代码案例,其他都大同小异 date类型: <!DOCTYPE html> <html> <head> <meta charset=" ...