当前位置: 首页 > news >正文

[ARC195E] Random Tree Distance

题目大意

一棵树上每个点的父亲 fa[i]fa[i]fa[i],满足 1<=fa[i]<i1<=fa[i]<i1<=fa[i]<i。因此一棵 nnn 个点的树有 (n−1)!(n-1)!(n1)! 种可能。

现在告诉你每个点连向父亲的边的边权 WiW_iWi。给你 QQQ(u,v)(u,v)(u,v) 让你求出每一对 (u,v)(u,v)(u,v) 在所有可能可能情况下的距离和。

思路

有一个比较常见的思路,就是把总和转换成期望值,然后把统计出来的期望值乘上情况的总数即可。

两个点的距离往往会这样写:dist(u,v)=d[u]+d[v]−2×d[lca(u,v)]dist(u,v)=d[u]+d[v]-2\times d[lca(u,v)]dist(u,v)=d[u]+d[v]2×d[lca(u,v)]

那么有 E(dist(u,v))=E(d[u])+E(d[v])−2×E(d[lca(u,v)])E(dist(u,v)) = E(d[u])+E(d[v])-2\times E(d[lca(u,v)])E(dist(u,v))=E(d[u])+E(d[v])2×E(d[lca(u,v)])

我们发现每个点深度的期望值 E(d[u])E(d[u])E(d[u]) 可以计算出来,为 E(d[i])=1n−1∑j=1n−1E(d[j])+WiE(d[i])=\frac{1}{n-1}\sum_{j=1}^{n-1}E(d[j])+W_iE(d[i])=n11j=1n1E(d[j])+Wi ,特别地,E(d[0])=0E(d[0])=0E(d[0])=0

接下来我们我们要计算 E(d[lca(u,v)])E(d[lca(u,v)])E(d[lca(u,v)]),不妨设 u<vu < vu<v

因为可能成为 lca(u,v)lca(u,v)lca(u,v) 的点有 1,2,3,...,u1,2,3,...,u1,2,3,...,u,因此我们只需要计算出每个点成为 lca(u,v)lca(u,v)lca(u,v) 的概率 PiP_iPi 就有,E(d[lca(u,v)])=∑i=1uDi×PiE(d[lca(u,v)])=\sum_{i=1}^uD_i\times P_iE(d[lca(u,v)])=i=1uDi×Pi

接下来就要去求出 PiP_iPi

我在做这题的时候是先分析出了 Pu=1uP_u=\frac{1}{u}Pu=u1,然后打表直接得到对于 1<=i<u1<=i<u1<=i<u,有 Pi=1i×(i+1)P_i=\frac{1}{i\times(i+1)}Pi=i×(i+1)1

现在来讲讲出现这个概率的原因。

  1. Pu=1uP_u=\frac{1}{u}Pu=u1

考虑从 vvv 一直往前跳,如果跳到一个 i(u<i<j)i(u<i<j)i(u<i<j),那么不会有任何的影响;如果某一次跳到了 i(i<=u)i(i<=u)i(i<=u),那么就有可能是 uuu,也有可能是 uuu 前面的点,因为最后这一跳有 uuu 个点可以选择,因此跳到 uuu 的概率就是 1u\frac{1}{u}u1

  1. Pi=1i×(i+1)(1<=i<u)P_i=\frac{1}{i\times(i+1)}(1<=i<u)Pi=i×(i+1)1(1<=i<u)

fi(1<=i<=u)f_i(1<=i<=u)fi(1<=i<=u),表示 lca(u,v)>=ilca(u,v)>=ilca(u,v)>=i 的概率,那么显然有 fu=1uf_u=\frac{1}{u}fu=u1

考虑 1<=i<u1<=i<u1<=i<u,有两种可能的情况发生:第一种是已经满足 lca(u,v)>=ilca(u,v) >= ilca(u,v)>=i,第二种是不满足 lca(u,v)>=ilca(u,v)>=ilca(u,v)>=i 但是两个路径最后一跳都刚好到达了 iii,因此有 fi=fi+1+(1−fi+1)(1i)2f_i=f_{i+1}+(1-f_{i+1})(\frac{1}{i})^2fi=fi+1+(1fi+1)(i1)2

根据数学归纳即可得到 fi=1if_i=\frac{1}{i}fi=i1,作差可得 Pi=fi−fi+1=1i×(i+1)(1<=i<u)P_i=f_{i}-f_{i+1}=\frac{1}{i\times(i+1)}(1<=i<u)Pi=fifi+1=i×(i+1)1(1<=i<u)

因为这个概率与 vvv 的值无关,因此可以预处理出来。

代码

http://www.dtcms.com/a/274441.html

相关文章:

  • 完全和零一背包
  • 游戏开发日记
  • nginx 负载均衡配置(加解决重复登录问题)
  • Reading and Writing to a State Variable
  • stm32-modbus-rs485程序移植过程
  • gRPC服务注册和故障恢复
  • AI技术重塑工业制造:从智能应用到大型模型落地
  • AMTS AHTE | 具身智能成制造升级新引擎 灵途科技助力更强感知
  • 八股训练--RabbitMQ
  • LVS-NAT模式配置
  • 《Java 虚拟机内幕:从垃圾回收到类加载的深度解析》
  • 微积分核心考点全解析
  • pnpm 的 resolution-mode 配置 ( pnpm 的版本解析)
  • 上位机知识篇---Docker
  • 静态路由综合实验报告册
  • HashMap简介
  • 五星出东方洛老师:gma绘制的洛阳市瀍河回族区的地图和兴趣点
  • 高精加法-P1601 A+B Problem(高精)
  • intellij idea的重命名shift+f6不生效(快捷键被微软输入法占用)
  • 决策树算法在医学影像诊断中的广泛应用
  • 知识科普丨详述agent含义
  • 【深度学习系列】ResNet网络原理与mnist手写数字识别实现
  • 浏览器重绘与重排
  • JAVA ---Excel高效导入(去重1000万数据对比)
  • 聊聊微服务架构中的双token
  • Junit多线程的坑
  • Python爬虫动态IP代理报错全解析:从问题定位到实战优化
  • 【牛客刷题】超级圣诞树(递归法和分形复制法)
  • 实时数仓和离线数仓还分不清楚?看完就懂了
  • SpringCloud 运用(5)—— sentinel限流与seata分布式事务