AGC50A 总结
原题链接 很神妙的一个题。 首先考虑答案下界,不难注意到对于每页面 $k$ 个链接,共 $n$ 个页面的情形,最远两点间需要不小于 $\lceil \log_k n\rceil$ 次点击。 为什么?因为信息熵。对于 $c$ 次点击和 $k$ 个链接,我们有 $k^c$ 种不同的点击序列,即使它们的终点两两不同,最多也只能覆盖 $k^c$ 个点,而我们一共需要覆盖 $n$ 个点。 当然可能点击少于 $c$ 次,所以长度不超过 $c$ 的序列有 $\frac{k^{c+1}-1}{k-1}$ 种。 $$ \begin{aligned} \frac{k^{c+1}-1}{k-1} &\geq n \\ \log_k(k^{c+1}-1)-\log_k (k-1) &\geq \log_k n \end{aligned} $$当 $n, k$ 趋于无穷大时,左边大约可以视为 $c$。那么 $c$ 自然要取最小的不小于 $\log_k n$ 的整数,也即 $\lceil \log_k n\rceil$。 当然,$k$ 较小时可能有常数级别误差,但问题不大。 然后考虑如何构造。 如果每个点允许三个指针,套用断线树/衡平树的结构是简单的。问题在于本题只有两个指针。 胡乱考虑了一些跳表,但是也无法砍到两个指针。思考了一些环状结构上建立加速索引,但是用处不大。 发现线段树可以利用叶子节点的剩余指针指回根节点,但最远距离是下界的 2 倍左右。 下面是非独立思考部分。 各种树形结构都有对父指针的需求。但叶子指针指回根节点以及环状结构启发了我们。 注意到叶子指针指回根节点只利用了一个指针,不够充分。 我们考虑一棵堆式存储的线段树,但叶子节点的两个指针对 $n$ 取模。 形式化的:节点 $p$ 的两个指针指向节点 $(2p) \bmod n$ 与 $(2p+1) \bmod n$,如果其中一个数为 0,则指针指向 $n$。 ...