P3830 [SHOI2012]随机树 题解】的更多相关文章

P3830 随机树 坑题,别人的题解我看了一个下午没一个看得懂的,我还是太弱了. 题目链接 P3830 [SHOI2012]随机树 题目描述 输入输出格式 输入格式: 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式: 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结点平均深度的数学期望值:如果 q = 2,则 d 表示树深度的数学期望值. 说明 第一问很水,考虑每次新拓展节点就是让树的总深度加上 2 也就是:…
P3830 [SHOI2012]随机树 链接 分析: 第一问:f[i]表示有i个叶子结点的时候的平均深度,$f[i] = \frac{f[i - 1] + 2 + f[i - 1] * (i - 1)}{2} $,表示新增加一个叶子结点,深度增加2,加权后取平均值. 第二问:f[i][j]表示有i个叶子结点,树的深度大于等于j的概率,有$f[i][max(k, l)+ 1] = \frac{f[j][k] \times f[i - j][l]}{i - 1}$,$ans=\sum\limits_…
LINK:随机树 非常经典的期望dp. 考虑第一问:设f[i]表示前i个叶子节点的期望平均深度. 因为期望具有线性性 所以可以由每个叶子节点的期望平均深度得到总体的. \(f[i]=(f[i-1]\cdot (i-1)+(f[i-1]+1)\cdot 2-f[i-1])/i=f[i-1]+2/i\) 考虑第二问:可以设f[i][j]表示i个叶子节点树高恰好为j的概率. 转移即可 不过值得注意的是 P(i,k)有i个叶子k个被分给左子树的概率为1/(i-1) 这个可以通过计算得到.最终可以通过前缀…
题面 luogu 题解 第一问: 设\(f[i]\)表示\(i\)步操作后,平均深度期望 \(f[i] = \frac {f[i - 1] * (i - 1)+f[i-1]+2}{i}=f[i-1]+\frac{2}{i}\) 第二问就比较难受了: \(E(x)=∑_{i=1}^{x}P\) 随机变量\(x\)的期望为对于所有\(i\),\(i≤x\)的概率之和 我们设\(f[i][j]\)表示\(i\)步后,树的深度\(>=j\)的概率 我们每次新建一个根,然后枚举左右子树分配节点情况 \(f…
https://www.luogu.org/problemnew/show/P3830#sub   <-题面看这里~ https://www.lydsy.com/JudgeOnline/problem.php?id=2830 感觉智商被压制了的一题……后面放吐槽. 参考:https://www.cnblogs.com/GuessYCB/p/8462490.html —————————————— 对于叶结点平均深度,我们令f(x)=(a1+...+ax)/x来表示(a可以每个叶子结点(人为标号)深…
https://www.luogu.org/problemnew/show/P3830 具体方法见代码.. 其实挺神奇的,概率可以先算出“前缀和”(A小于等于xxx的概率),然后再“差分”得到A恰好为xxx的概率 话说推了很久“x个叶子节点的树,左子树有y个节点”的概率的dp,推不出来,然后无意间手玩了一下5个叶子节点,发现这个东西其实就等于1/(x-1),跟y没有关系... #include<cstdio> #include<algorithm> #include<cstr…
题目:https://www.luogu.org/problemnew/show/P3830 询问1:f[x]表示有x个叶节点的树的叶节点平均深度: 可以把被扩展的点的深度看做 f[x-1] ,于是两个新点深度为 f[x-1]+1,而剩下的x-2个点平均深度就是f[x-1]: 所以f[x] = [ f[x-1] * (x-2) + (f[x-1] + 1) * 2 ] / x : 整理得到f[x] = f[x-1] + 2 / x : 询问2:f[i][j]表示有i个叶子节点.深度为j的概率:…
输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结点平均深度的数学期望值:如果 q = 2,则 d 表示树深度的数学期望值. p=1 令f(x)表示有x个叶子节点的树的叶子节点平均深度,则 f(x)*x 为叶子节点深度之和 f(x)+2随机选择一个叶子节点展开后增加的深度 f(x)= ((x-1)f(x-1)+f(x-1)+2)/x = (xf(x) +…
题目链接 bzoj2830: [Shoi2012]随机树 题解 q1好做 设f[n]为扩展n次后的平均深度 那么\(f[n] = \frac{f[n - 1] * (n - 1) + f[n - 1] + 2}{n}\) 化简之后也就是\(f[n] = f[n - 1] + \frac{2}{n}\) q2也好做 设f[i][j]表示扩展i次,树高为j的概率,对于左右儿子,子问题显然是一样的 枚举左右子树的i j 转移 \(f[i][std::max(l,k) + 1] += f[j][k] *…
[SHOI2012]随机树 题目大意( 网址戳我! ) 随机树是一颗完全二叉树,初始状态下只有一个节点. 随机树的生成如下:每次随机选择一个叶子节点,扩展出两个儿子. 现在给定一个正整数\(n\)(\(n \le 100\)) , 询问叶子节点个数为\(n\)的随机树: \(q = 1\) :叶子节点的平均深度 \(q = 2\) :整棵随机树的平均深度 样例:\(cin\ q\ n\ \ \ \ ;cin\ 1\ 4\ ,\ put\ 2.166667\ \ \ ;\ \ \ cin \ 2…
题目传送门 Description \(n\le 100\) Solution Problem 1 不难看出,答案就是: \[1+\sum_{i=1}^{n-1} 2/(i+1) \] Problem 2 这个问真的很仙. 可(bu)以(neng) 想到,我们可以设 \(f_{i,j}\) 表示有 \(i\) 个叶子时深度 \(\ge j\) 的概率,可以得到转移式: \[f_{i,j}=\frac{1}{i-1}\sum_{k=1}^{i-1} (f_{k,j-1}+f_{i-k,j-1}-f…
传送门:洛谷 题目大意:对于一个只有一个节点的二叉树,一次操作随机将这棵树的叶节点的下方增加两个节点.$n-1$次操作后变为$n$个叶节点的二叉树.求:(1)叶节点平均深度的期望值(2)树深度的数学期望值 数据范围:$2\leq n\leq 100$ 首先看第(1)问 设$f_i$为$i$个叶节点的二叉树的叶节点平均深度的期望值. 每次选择一个叶节点,扩展出两个新的叶节点,所以总的深度增加$f_{i-1}+2$ 则$f_i=\frac{(i-1)*f_{i-1}+f_{i-1}+2}{i}=f_…
感觉第一问就非常神仙,还有第二问怎么被我当成组合数学题来做了 首先是第一问 期望具有线性性,于是深度平均值的期望等于深度和的期望值的平均 设\(dp_x\)表示具有\(x\)个叶子节点的树的深度和的期望值是多少 我们发现扩展一个叶子节点的实质将其变成两个深度原来大一的叶节点,所以对整个答案的贡献也就是这个被扩展的叶子节点的深度乘\(2\),再加上\(2\) 比如我们当前扩展的是叶子节点\(1\),那么答案就从\(dep_1+dep_2+...+dep_x\)变成了\(2*(dep_1+1)+de…
题目 输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结点平均深度的数学期望值:如果 q = 2,则 d 表示树深度的数学期望值. 输入样例 1 4 输出样例 2.166667 提示 题解 第一问比较简单,我们设\(f[i]\)表示第\(i\)次扩展的期望深度 那么 \[f[i] = \frac{f[i - 1] * (i - 2) + (f[i - 1…
题意 初始 \(1\) 个节点,每次选定一个叶子节点并加入两个儿子直到叶子总数为 \(n\),问叶子节点深度和的平均值的期望以及最大叶子深度的期望. \(n\leq 100\) . 分析 对于第一问,根据答案定义状态 \(f_i\) 表示有 \(i\) 个叶子节点的深度和平均值的期望. 考虑对于之前的每一棵树对期望的贡献,记其发生的概率为 \(p\) ,深度和为 \(w\) ,有 \(i-1\) 个叶子节点.贡献为 \(p*\frac{w}{i-1}\) .现在要多选定一个叶子节点有 \(i-1…
题意非常的复杂,考虑转化一下: 每次选择一个叶节点,删除本叶节点(深度为$dep$)的同时,加入两个深度为$dep + 1$的叶节点,重复$n$轮 首先考虑第$1$问,(你看我这种人相信数据绝对是最大的数据,直接$f[i][S]$表示$i$个叶子结点,深度之和为$j$的时候的概率,然后化前缀和化出来...) 对于一个深度为$x$的点,对它操作后,深度增加了$2 * (x+ 1) - x = x +2$ 现在考虑平均的情况,令$f[i]$表示$i$个节点的平均深度,那么$f[i] = \frac{…
[BZOJ2830/洛谷3830]随机树(动态规划) 题面 洛谷 题解 先考虑第一问. 第一问的答案显然就是所有情况下所有点的深度的平均数. 考虑新加入的两个点,一定会删去某个叶子,然后新加入两个深度为原先叶子\(+1\)的点. 那么新加入的叶子的深度的期望是未加入之前的期望+1,假设\(f_i\)为\(i\)个点的期望. 那么\(f_i=(f_{i-1}*({i-1})-f_{i-1}+2*(f_{i-1}+1))/i=f_{i-1}+2/i\) 含义就是平均的深度乘上点的个数等于深度总和,减…
Vijos1448校门外的树 题解 描述: 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的…… 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K=1,读入l.r表示在区间[l,r]中种上一种树,每次操作种的树的种类都不同 K=2,读入l,r表示询问l~r之间能见到多少种树 (l,r>0)   输入格式: 第一行n,m表示道路总长为n,共有m个操作 接下来m行为m个操作   输出格式: 对于每个k=2输出一个答案  …
""" version1.1,2018-05-09 <基于智能优化与RRT算法的无人机任务规划方法研究>博士论文 <基于改进人工势场法的路径规划算法研究>硕士论文 """ import matplotlib.pyplot as plt import random import math import copy show_animation = True class Node(object): ""&qu…
RRT是一种多维空间中有效率的规划方法.它以一个初始点作为根节点,通过随机采样增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点包含了目标点或进入了目标区域,便可以在随机树中找到一条由从初始点到目标点的路径.RRT方法是概率完备且不最优的. function BuildRRT(qinit, K, Δq) T.init(qinit) for k = 1 to K qrand = Sample() -- chooses a random configuration qnearest = N…
RRT快速搜索随机树英文全称Rapid-exploration Random Tree,和PRM类似,也是一种路径规划算法. 和PRM类似,算法也需要随机撒点,不过不同的是,该算法不是全局随机撒点,而是一次撒一个点,然后判断当前搜索树与随机点距离,然后找到搜索树距离随机点最近的节点,向该随机点方向扩展.这里随机点有一定的概率是终点,所以搜索树最终是能够到达终点的. 算法流程如下: 1. 首先确定地图与起始结束点位置,设置搜索树,这里定义了一个随机点列表和一个随机点索引前驱列表代表搜索树. 2.…
题意:中文题,按照题目要求的二叉树生成方式,问(1)叶平均深度 (2)树平均深度 解法:这道题看完题之后完全没头绪,无奈看题解果然不是我能想到的qwq.题解参考https://blog.csdn.net/Maxwei_wzj/article/details/82262755这位大佬的,这里讲下我的理解: 首先是第一问:第一问会简单一些,设f[i]代表叶节点为i的树的叶平均深度,那么因为是平均那么 i*f[i] 就是叶子总深度啦.在叶子深度x下拓展得到的新贡献是 2(x+1)-x=x+2  .那么…
\(\\\) \(Description\) 开始有一棵只有一个根节点的树.每次随机选择一个叶子节点,为他添上左右子节点,求: 生成一棵有\(N\)个叶节点的树,所有叶节点平均高度的期望. 生成一棵有\(N\)个叶节点的树,树高的期望. 约定根节点深度为\(0\). \(N\in [1,100]\) \(\\\) \(Solution\) 果然还是太菜了只会抄题解 一道期望和概率间巧妙转化的好题. \(\\\) 第一问,平均的性质. 考虑每次扩展会随机选择一个叶节点,假设该叶节点的深度为\(d_…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1353 今天小a在纸上研究树的形态,众所周知的,有芭蕉树,樟树,函树,平衡树,树套树等等.那么小a今天在研究的就是其中的平衡树啦. 小a认为一棵平衡树的定义为一个n个点,从1到n编号,n-1条边,且任意两点间一定存在唯一一条简单路径,且n>=k. 现在小a看到一棵很大很大的树,足足有n个节点,这里n一定大于等于k!为了方便起见,它想把这个树删去某些边,使得剩下的若干个联通…
题目描述 给定n个整数构成的序列,将对于指定的闭区间查询其区间内的第k小值. 输入输出格式 输入格式 第一行包含两个正整数n,m,分别表示序列的长度和查询的个数. 第二行包含n个整数,表示这个序列各项的数字. 接下来m行每行包含三个整数l,r,k, 表示查询区间[l,r]内的第k小值. 输出格式 输出包含m行,每行一个整数,依次表示每一次查询的结果 输入输出样例 输入样例 5 5 5957 6405 15770 26287 26465 2 2 1 3 4 1 4 5 1 1 2 2 4 4 1…
本题使用线段树自然能够,由于区间的问题. 这里比較难想的就是: 1 最后更新须要查询全部叶子节点的值,故此须要使用O(nlgn)时间效率更新全部点. 2 截取区间不能有半点差错.否则答案错误. 这两点卡了我下.看来我的线段树还是不够熟,须要多多练习. 线段树是二分法的高级应用,可是却不是简单应用,要锻炼好并应用好线段树思维还是比二分法难非常多的. static const int SIZE = 100005; static const int TREESIZE = SIZE<<2; int a…
Problem Description There are a bunch of stones on the beach; Stone color is white or black. Little Sheep has a magic brush, she can change the color of a continuous stone, black to white, white to black. Little Sheep like black very much, so she wan…
题目 此题是一个模拟题,但需要注意的一点就是它的树是从数轴的0开始,所以我们也要从0开始,这样才能实现代码. 代码: #include<iostream> using namespace std; int s[100000]; int main() { int l,m,x,y,d=0; cin>>l>>m; for(int i=0; i<=l; i++) s[i]=1; for(int i=0; i<m; i++) { cin>>x>>…
题目描述 输入 输出 样例输入 4 0 1 1 2 2 3 4 Add 1 3 1 Query 0 Query 1 Query 2 样例输出 3 3 2   树链剖分模板题,路径修改子树查询,注意节点编号从零开始,答案爆int. #include<set> #include<map> #include<queue> #include<stack> #include<cmath> #include<vector> #include<…
http://poj.org/problem?id=1389 题面描述在二维xy平面中有N,1 <= N <= 1,000个矩形.矩形的四边是水平或垂直线段.矩形由左下角和右上角的点定义.每个角点都是一对两个非负整数,范围从0到50,000,表示其x和y坐标. 求出所有矩形的面积(重叠部分只算一次) 示例:考虑以下三个矩形: 矩形1:<(0,0)(4,4)>, 矩形2:<(1,1)(5,2)>, 矩形3:<(1,1)(2,5)>. 所有由这些矩形构造的简单多…