题解 [PR #6] 情报传递 2

传送门

想写没写完的乱搞:
考虑对每次询问传一个 \([0, 5]\) 的编号表示最短路应该经过哪条边或都不经过
随着前几次询问结果得知,可知 \(\forall i, w_i\in[l_i, r_i]\)
所以可以缩小 \(i\) 的可行方案数,可以少用几位
\(O(玄学)\)

然后正解:
因为难以表述所以见官方题解
因为代码难写所以鸽了
大意是对每个询问计算(边) \(a\)\(b\) 优秀的条件
大概长成

\[w_a+X_{i, a}<w_b+X_{i, b} \]

变形

\[w_a-w_b<X_{i, b}-X_{i, a} \]

然后左边一共 \(\binom{5}{2}=15\)
对每对 \((a, b)\),将 \(X_{i, b}-X_{i, a}\) 排序后将 \(w_a-w_b\) 在这个有序序列中的排名传过去
在接收方可以逆过程还原所有 \(f(i, a, b)\)
需要 90 bit

然后发现把所有 \(f(i, a, b)\) 都发过去很浪费

(图译:所以路径 2 是最短的)

所以考虑分组区分
询问只有 \(Q\)
在时刻 \(i\) 只考虑 \([0, i]\) 中的边
在 0 时刻假设每个询问都是选择边 0 最优的
尝试在每个时刻 \(i\)\([0, i]\) 中的每条边维护 选择 \(i\) 是最优的 的询问的集合
每轮用边 \(i+1\) 和每个选 \(j\in[0, i]\) 最优的集合进行询问,依照结果进行再次分组
\(k\) 轮后即可得对每个询问都得到最优的边
复杂度在每个集合大小相等时取到上界

\[\sum_{i=1}^{k} i\left\lceil\log_2 \frac{Q+1}{i}\right\rceil \]

对是复制过来的
共需要 64 个 Bit

代码鸽了

posted @ 2022-07-10 20:30  Administrator-09  阅读(28)  评论(0编辑  收藏  举报