题意

给出点数为 $n$($n \le 1000$)的完全图 $K_n$,带边权。随机出 $K_n$ 的一棵生成树 $T$。求 $T$ 上任意两点间距离的期望。

解法

固定两点 $u$、$v$($u \le v$),考虑生成树 $T$ 上 $u$ 到 $v$ 的路径 $P_{uv}$。$P_{uv}$ 上的边可分成三类:

  1. $(u, v)$
  2. $(u, x)$、$(y, v)$,$x,y \notin \{u, v\}$
  3. $(x,y)$,$x, y \notin \{u, v\}$

第1类边出现在 $P_{uv}$ 上的概率为 $\dfrac{2}{n}$
每个第2类边出现在 $P_{uv}$ 上的概率为 $\dfrac{1-\dfrac{2}{n}}{n-2}=\dfrac{1}{n}$

考虑第3类边(对期望)的贡献。

首先应当注意到,所有第3类边出现在 $P_{uv}$ 上是等可能的,所以我们只需要求 $P_{uv}$ 上第三类边的数目的期望 $E(n)$。

用 $f(i)$ 表示 $K_n$ 的所有生成树中,满足「$P_{uv}$ 上点数为 $i$(包括两端点 $u$,$v$)」的生成树的数目。
我们分 3 步来求 $f(i)$:

  1. 固定 $P_{u,v}$,将 $P_{uv}$ 缩成一点 $w$,加上余下的 $n-i$ 个点,就得到一棵 $n-i+1$ 个点的树 $T'$。

  2. 将 $w$ 的度数固定为 $j$,对应的生成树 $T'$ 的数目 $g(j)$ 的表达式为
    \begin{equation}
    g(j) = \binom{n-i-1}{j-1}(n-i)^{n-i-j} \label{E:1}
    \end{equation}
    $\eqref{E:1}~$式可通过 Prufer 序列与树的一一对应关系得到。

  3. 与 $w$ 相连的 $j$ 棵子树中的每一棵,在 $T$ 中可以连在 $P_{uv}$ 上的 $i$ 个点中的任意一个,所以我们得到
    $$
    \begin{equation}
    \begin{aligned}
    f(i) &= \mathrm{A}_{n-2}^{i-2}\sum_{j=1}^{n-i} g(j) \cdot i^{j} \\
    &= \mathrm{A}_{n-2}^{i-2}\sum_{j=1}^{n-i} \binom{n-i-1}{j-1} (n-i)^{n-i-j} \cdot i^{j} \\
    &= \mathrm{A}_{n-2}^{i-2}\cdot i \cdot \sum_{j'=0}^{n-i-1} \binom{n-i-1}{j'}(n-i)^{n-i-1-j'} \cdot i^{j'} \\
    &= \mathrm{A}_{n-2}^{i-2} \cdot i \cdot n^{n-i-1} \label{E:2}
    \end{aligned}
    \end{equation}
    $$

从而
$$
\begin{equation}
\begin{aligned}
E(n) &= \frac{\sum\limits_{i=4}^{n} f(i)(i-3)}{n^{n-2}} \\
&= \sum_{i=4}^{n} \frac{\mathrm{A}_{n-2}^{i-2}i(i-3)}{n^{i-1}}
\end{aligned}
\end{equation}
$$

Implementation

#include <bits/stdc++.h>
using namespace std;using DB=long double;const int N=1005;
DB res[N][N];
int a[N][N];DB calc(int n){if(n<=3) return 0;DB pn=1;for(int i=1; i<=n-2; i++)pn*=i, pn/=n;// cout << pn << endl;DB sum=pn*(n-3);for(int i=n-1; i>=4; i--)pn*=n*i, pn/=(n-i)*(i+1), sum+=pn*(i-3);return sum;
}int main(){// int cnt=0;// for(int i=0; i<=1000; i++)//     cnt+=fabs(t[i]-calc(i))>1e-50;// cout << cnt << endl;int n, tot=0;scanf("%d", &n);for(int i=1; i<=n; i++)for(int j=1; j<=n; j++)scanf("%d", a[i]+j), a[i][0]+=a[i][j], tot+=a[i][j];tot/=2;DB x=calc(n);for(int i=1; i<n; i++)for(int j=i+1; j<=n; j++){res[i][j]=(a[i][0]+a[j][0])/DB(n);if(n>=4)    // 注意:n=2 或 3 时,分母为 0res[i][j]+=x*(tot-a[i][0]-a[j][0]+a[i][j])/((n-2)*(n-3)/2);res[j][i]=res[i][j];}for(int i=1; i<=n; i++)for(int j=1; j<=n; j++)printf("%.9Lf%c", res[i][j], j==n?'\n':' ');return 0;
}

转载于:https://www.cnblogs.com/Patt/p/6568257.html

hihoCoder #1047 Random Tree相关推荐

  1. rapidly exploring random tree(快速搜索随机树)路径规划

    直接上程序 %% 流程初始化 clear all; close all; pic_num=1;%制作gif所需参数 x_I=1; y_I=1; % 设置初始点 x_G=600; y_G=600; % ...

  2. RRT(rapidly exploring random tree)算法学习笔记,机器人自主探索,路径规划

    一.算法描述: 1.主要思想 简单来说, RRT算法是一种树型算法,它由一个起始点Xinit作为树的起始节点(或者叫根节点),然后从这个起始点进行随机生长,通过随机采样增加叶子节点Xnew的方式,生成 ...

  3. 【运动规划】RRT快速搜索随机树 Rapidly Exploring Random Tree

    Randomized Kinodynamic Planning Steven M. LaValle James J. Kuffner, Jr. 1. Exploring the State Space ...

  4. JQuery EasyUI DataGrid 、tree查询

    1.DataGrid查询 queryParams = $('#dg').datagrid('options').queryParams; queryParams.action = 'target'; ...

  5. Python实现-RRT-Rapidly-exploring Random Tree-快速搜索随机树

    python代码地址:RRT_and_Pruning RRT是Rapidly-exploring Random Tree的简写,是基于随机采样的一种路径规划方法,它能够快速地搜索整个状态空间,并偏向于 ...

  6. 自动驾驶汽车的规划与控制

    1. 概念与意义 自动驾驶汽车作为一个复杂的软硬件结合系统,其安全,可靠地运行需要车载硬件,传感器集成.感知.预测以及规划控制等多个模块的协同配合工作.感知预测和规划控制的紧密配合非常重要.这里的规划 ...

  7. 技术图文:如何利用 Turtle 绘制一棵漂亮的樱花树

    背景 最近看到很多机构在推动"青少年编程能力等级标准"的制定以及相关考试的测评,看样子今年年底这个事情就能够确定,明天上半年在一些大中城市就会全面铺开. <青少年编程能力等级 ...

  8. 入门 | 无人驾驶汽车系统基本框架梳理

    作者简介:申泽邦(Adam Shan),兰州大学在读硕士研究生,主攻无人驾驶,深度学习:兰大未来计算研究院无人车团队骨干,在改自己的无人车,参加过很多无人车Hackathon,喜欢极限编程. 无人驾驶 ...

  9. Nature Methods | 用深度多任务神经网络探索单细胞数据

    1.研究背景 在生物医学领域,分析大规模.高维度的单细胞数据,并且处理由分批实验效应和不同制备造成的数据噪声是当前的挑战:单细胞数据的大规模.高维度处理比较困难,需要考虑数据中不同程度的噪声.分批效应 ...

最新文章

  1. 转载:关于错排的相关知识
  2. 华一银行开发安全内部培训圆满结束
  3. Web前端开发笔记——第三章 CSS语言 第六节 CSS定位
  4. 创建型模式——工厂模式
  5. 少锁定Java对象池
  6. aspnetcore源码学习(一)
  7. context:component-scan扫描使用的use-default-filters
  8. 视频跟踪——CMT算法
  9. C#设计模式之19-观察者模式
  10. HTML中文网页乱码问题
  11. django mac 安装mysql_mac安装MySQL-Python报错
  12. bzoj4974: [Lydsy1708月赛]字符串大师
  13. php disable-ipv6,強迫 PHP Curl 使用 IPv4 , 忽略 IPv6
  14. 试图速成的RPG Maker MV 学习笔记(三)
  15. LaTeX引文.bib方式插入——misplaced alignment tab character . ...ock{\em IEEE Transactions onSystems Man
  16. 抖音爆火微信每日早安推送
  17. 商品评论信息与评论信息分类
  18. Activiti工作流(一):OA 上的那些请假流程如何快速实现呢?
  19. EXFS的块分配策略
  20. 安装Arch(含输入法配置)

热门文章

  1. 一步一步写自己的SqlHelper类库
  2. log4j屏蔽掉某个包下的log日志打印
  3. trinosql_prestosql问题
  4. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法
  5. pytorch BiLSTM+CRF代码详解 重点
  6. Hexo集成Algolia实现搜索功能
  7. 华为八爪鱼自动驾驶云
  8. 2021年大数据常用语言Scala(九):基础语法学习 break和continue
  9. python 运算符 is 与 is not 的理解
  10. [搜索]UVa 129 困难的串