洛谷题目链接:[HAOI2018]苹果树

题目背景

HAOI2018 Round2 第一题

题目描述

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

第一天的时候, 果树会长出一个根结点, 以后每一天, 果树会随机选择一个当前树中没有长出过结点 的分支, 然后在这个分支上长出一个新结点, 新结点与分支所属的结点之间连接上一条边.

小 C 定义一棵果树的不便度为树上两两结点之间的距离之和, 两个结点之间 的距离定义为从一个点走到另一个点的路径经过的边数.

现在他非常好奇, 如果 \(N\) 天之后小 G 来他家摘苹果, 这个不便度的期望 \(E\) 是多少. 但是小 C 讨厌分数, 所以他只想知道 \(E \times N !\) 对 \(P\) 取模的结果, 可以证明这是一个整数.

输入输出格式

输入格式:

从标准输入中读入数据. 一行两个整数 \(N\), \(P\) .

输出格式:

输出到标准输出中. 输出一个整数表示答案.

输入输出样例

输入样例#1:

3 610745795

输出样例#1:

24

输入样例#2:

305 1000000007

输出样例#2:

865018107

说明

以上是所有 \(N = 3\) 时可能的苹果树形态, 其中编号表示这个结点是第几天生 长出来的, 显然每种情况两两结点的距离均为 \(4\) .

题解: 这个枚举方式比较神奇...我也不太清楚为什么可以做到不重不漏,有人会可以帮我分析一下...

直接讲方法吧:

首先考虑如何计算贡献,我们分每条边来计算贡献,那么总贡献就是\(\sum size*(n-size)\)

考虑当前枚举到了节点\(i\),它有一颗大小为\(j\)的子树,那么前\(i\)个节点可能组成的方案数是\(i!\),这个大小为\(j\)的子树的方案数有\(j!\)种,然后剩下的\(n-i-j\)个节点随便放,第一个节点可以放置的方案是\(i\)种,第二个是\(i+1\)种,那么剩下节点随便放的贡献就是\(\frac{(n-j)!}{(i-1)!}\),总贡献就是:$$\sum_{i=1}{n}\sum_{j=1}{n-i}i!2C_{n-i}^jj!j(n-j)\frac{(n-j)!}{(i-1)!}$$

因为不一定存在逆元,可以先递推杨辉三角,然后把最后那部分用组合数乘阶乘的形式表示出来.

当然这题也有\(DP\)的解法,有兴趣可以自己看看别的题解

#include<bits/stdc++.h>
using namespace std;
const int N = 2000+5; int n, mod, fac[N], c[N][N], ans = 0; int main(){
cin >> n >> mod; c[0][0] = fac[0] = fac[1] = 1;
for(int i = 1; i <= n; i++){
c[i][0] = 1;
for(int j = 1; j <= n; j++) c[i][j] = (c[i-1][j]+c[i-1][j-1])%mod;
}
for(int i = 1; i <= n; i++) fac[i] = 1ll*fac[i-1]*i%mod;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n-i; j++)
(ans += 1ll*fac[i]*2%mod*c[n-i][j]%mod*fac[j]%mod*j%mod*(n-j)%mod*c[n-j-1][n-i-j]%mod*fac[n-i-j]%mod) %= mod;
cout << ans << endl;
return 0;
}

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

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

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

  2. [洛谷P4491] [HAOI2018]染色

    洛谷题目链接:[HAOI2018]染色 题目背景 HAOI2018 Round2 第二题 题目描述 为了报答小 C 的苹果, 小 G 打算送给热爱美术的小 C 一块画布, 这块画布可 以抽象为一个长度 ...

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

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

  4. 洛谷 P4495 [HAOI2018]奇怪的背包 解题报告

    P4495 [HAOI2018]奇怪的背包 题目描述 小\(C\)非常擅长背包问题,他有一个奇怪的背包,这个背包有一个参数\(P\),当他 向这个背包内放入若干个物品后,背包的重量是物品总体积对\(P ...

  5. P4492 [HAOI2018]苹果树

    思路 题目要求的其实就是每种方案的权值之和(因为每种方案的概率相等) 所以自然想到要求所有的边对最终答案的贡献次数 考虑这一条边被经过了多少次,有这个子树内的点数*子树外的点数次,即\(k\times ...

  6. 洛谷P4493 [HAOI2018]字串覆盖(后缀自动机+线段树+倍增)

    题面 传送门 题解 字符串就硬是要和数据结构结合在一起么--\(loj\)上\(rk1\)好像码了\(10k\)的样子-- 我们设\(L=r-l+1\) 首先可以发现对于\(T\)串一定是从左到右,能 ...

  7. 洛谷P4494 [HAOI2018]反色游戏(tarjan)

    题面 传送门 题解 我们先来考虑一个联通块,这些关系显然可以写成一个异或方程组的形式,形如\(\oplus_{e\in edge_u}x_e=col_u\) 如果这个联通块的黑色点个数为奇数,那么显然 ...

  8. 洛谷P4495 [HAOI2018]奇怪的背包(数论)

    题面 传送门 题解 好神仙的思路啊--orzyyb 因为不限次数,所以一个体积为\(V_i\)的物品可以表示出所有重量为\(\gcd(V_i,P)\)的倍数的物品,而所有物品的总和就是这些所有的\(\ ...

  9. 洛谷 P2015 二叉苹果树 (树上背包)

    洛谷 P2015 二叉苹果树 (树上背包) 一道树形DP,本来因为是二叉,其实不需要用树上背包来干(其实即使是多叉也可以多叉转二叉),但是最近都刷树上背包的题,所以用了树上背包. 首先,定义状态\(d ...

随机推荐

  1. 我是一名IT小小鸟

    我是一只it小小鸟 书中介绍了it界大牛们大学期间的学习方法和对未来的职业规划,相比他们,自我感觉相距甚远,对这学科的热情程度也远远比不上他们. 就拿目前数据结构这门高深的课程,应通过更多的课外扩展来 ...

  2. mabatis报错 Result Maps collection already contains value for gamedataserver.dao.one.ChargeRecordMapper.BaseResultMap

    1.解决这种报错看看英文"already ",也就是已经存在,其实是因为存在了两个id相同的返回,以下可以看看,根据这种例子看看自己项目是不是这种问题

  3. angularJS1笔记-(13)-自定义指令(controller和controllerAs实现通信)

    index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  4. spring时间管理

    spring时间管理相比Quartz要简单的多,但功能不如quartz强大 spring.xml的配置 <?xml version="1.0" encoding=" ...

  5. js+Canvas 利用js 实现浏览器保存图片到本地

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. (二)Jmeter各部件的作用

    JMeter主要组件介绍 1.测试计划(Test Plan)是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器. 2.线程组(Thread Group)代表一定数量的并发用户 ...

  7. Implement Trie and find longest prefix string list

    package leetcode; import java.util.ArrayList; import java.util.List; class TrieNode{ Boolean isWord; ...

  8. Spring(2):Spring Ioc

    1.下载spring-framework-3.2.0 完整包下载路径: https://repo.spring.io/webapp/#/artifacts/browse/tree/Properties ...

  9. js浏览器缩放提示

    data() { return { instance: null, isZoomOpen: false }; }, mounted() { const that = this; this.isZoom ...

  10. Day24-part1-原生Ajax

    参考老师博客:http://www.cnblogs.com/wupeiqi/articles/5703697.html 主要讲了:发数据的3种方式以及上传文件的3种方式.(后续需要总结) 一,原生Aj ...