求传递闭包大小的其他做法
  • 板块学术版
  • 楼主EastPorridge
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/2/1 20:03
  • 上次更新2023/10/24 02:10:25
查看原帖
求传递闭包大小的其他做法
230865
EastPorridge楼主2023/2/1 20:03

吃饭的时候吃出来的

首先肯定有个 bitset 的解法,但当 nn 大到一定程度,时间和空间都不是很行,我想了一个随机化


ii 随机点权为 aia_i,闭包大小为 kik_i,给每个点随机在 [1,v][1,v] 赋值,用 viv_i 表示能被 ii 到达的点 jj 中最小的 aja_j,最大的也可以,viv_i 可以拓扑一遍求

根据 这个 令咒(我不会积分,直接看的结论),kik_i 的最小值期望为 1ki+1\frac{1}{k_i+1},同时 viv_i 是全局最小值期望为 viv+1\frac{v_i}{v+1},这两个东西等价,联立一下就是

1ki+1=viv+1\frac{1}{k_i+1} = \frac{v_i}{v+1}

ki=v+1vi1k_i = \frac{v+1}{v_i} -1

多来几次随机化,求的 kiˉ\bar {k_i} 就是 ii 的答案。


问题是 “viv_i 是全局最小值期望为 viv+1\frac{v_i}{v+1}” 这一步是我根据前一个式子猜的,我自己造了点数据试了试是对的,不知道为啥是对的,还是错的我不知道

还有就是这样做得到正确的答案的期望次数是多少,我个人倾向整体 O(n2)O(n^2) 的,赋值,拓扑 O(n)O(n),一共随机 nn 次,当然建立在这个东西是对的前提下

求助,提前谢谢了

2023/2/1 20:03
加载中...