牛客41614I - It Takes Two of Two
- https://ac.nowcoder.com/acm/contest/41614/I
- https://codeforces.com/gym/103931/problem/I
- 来源:2022 · 上海市赛
- 难度:金牌题、紫
题意
- 有一个随机数生成器,每次独立、均匀、随机地生成两个在 的随机数
- 有一张图初始时图为空。
- 流程如下:
- (1)运行一次随机数生成器,得到
- (2)将双向边 添加到图中后,图满足如下条件,则将双向边 添加到图中。
- 图没有重边,没有自环
- 每个点的度数
- 若不满足上述条件,则回到步骤(1)
- 将双向边 添加到图中后,无论生成多少次随机数都找不出符合条件的 ,则立即停止。
- 给出 ,问:运行随机数生成器次数的期望。
思路
- 图内连通块的形态可以分为这两种:环、链
- 如果将节点数量 的长链首尾连接,将变链为环。
- 但如果将节点数量 的短链首尾连接,将产生重边。
- 因此我们只关心某一种状态下:
- 未选择过的点的数量、
- 图中短链的数量、
- 图中长链的数量
- 每随机生成一个 ,它有可能是:
序号 | 情况 | 说明 |
---|---|---|
1 | 之前均从未出现过 | 是一个新的短链 |
2 | 之前属于某条短链,而 之前从未出现过 | 这条短链变成长链 |
3 | 之前属于某条长链,而 之前从未出现过 | 延长这条长链 |
4 | 之前属于某条长链,而 属于某条短链 | 延长这条长链,短链消失 |
5 | 之前属于某条短链, 之前属于另一条短链 | 这两条短链合成一条长链 |
6 | 之前属于某条长链, 之前属于另一条长链 | 这两条长链合成一条长链 |
7 | 和 之前属于同一条长链 | 这条长链变成一个环 |
8 | 以上条件均不符合 | 需要重新生成 |
- 令 代表当前状态未选择过的点的数量、图中短链的数量、图中长链的数量下,从这个状态出发直到停止的期望运行次数,进行记搜即可。
概率的计算
情况1 情况2 注意分子需要乘以2,因为选择不分先后顺序。 其它的略
期望的计算
- 令
- 则 以上条件均不符合的概率,此时需要需要重新生成 。
- 那么,在当前状态下,不一定仅生成一次随机数就一定能进入到下一个 dp 状态,大约需要生成 次(期望值),才进入下一个 dp 状态。
- 好了,假设现在我生成了若干次随机数,现在已经能够进入下一个 dp 状态了。
- 那么,,这个答案对吗?
- 错误
- 原因:
- 在这个状态中,是先生成若干次随机数,但是对应的一直是情况8,这几次对 的贡献是 。
- 直到某一次不再是情况8,此时进入到下一个 dp 状态。但是我们之前算出的概率 是假设 情况8可能发生 的概率,而我们需要的是 情况8一定不发生 的概率。
- 因此,概率要再除上
代码
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=54650365