吃饭的时候吃出来的
首先肯定有个 bitset 的解法,但当 n 大到一定程度,时间和空间都不是很行,我想了一个随机化
设 i 随机点权为 ai,闭包大小为 ki,给每个点随机在 [1,v] 赋值,用 vi 表示能被 i 到达的点 j 中最小的 aj,最大的也可以,vi 可以拓扑一遍求
根据 这个 令咒(我不会积分,直接看的结论),ki 的最小值期望为 ki+11,同时 vi 是全局最小值期望为 v+1vi,这两个东西等价,联立一下就是
ki+11=v+1vi
ki=viv+1−1
多来几次随机化,求的 kiˉ 就是 i 的答案。
问题是 “vi 是全局最小值期望为 v+1vi” 这一步是我根据前一个式子猜的,我自己造了点数据试了试是对的,不知道为啥是对的,还是错的我不知道
还有就是这样做得到正确的答案的期望次数是多少,我个人倾向整体 O(n2) 的,赋值,拓扑 O(n),一共随机 n 次,当然建立在这个东西是对的前提下
求助,提前谢谢了