Loading

开车旅行

思路

好长的题面

先考虑 \(70 \%\) 的情况

我们可以方便的 \(\mathcal{O} (n ^ 2)\) 处理每个点下一个会到的点

因为 \(x_i\) 非常的大, 所以我们需要更高效的处理问题, 而不能纯模拟

这个时候我们就可以想到使用倍增的方法, 还是同样的令 \(f_{i, j, 0 / 1}\) 表示从 \(i\) 城市开始, 行驶 \(2 ^ j\) 天, 最初是 \(A / B\) 开车, 最终会到达的城市

\(dista_{i, j, 0 / 1}, distb_{i, j, 0 / 1}\) 分别表示 \(A, B\) 开过的距离

整个转移是简单的, 特别的, 对于 \(j = 0\) 时, 需要特殊转移

然后发现排序之后处理每个点下一个会到的点, 瓶颈在重复处理, 考虑链表删除处理过的点即可 \(\mathcal{O} (n)\) 处理

代码

现在肯定没时间打这种题

总结

如果不存在最优解问题, 大概率可以倍增优化

链表用于删除是很好的, 一会去找一个好写的板子

posted @ 2024-12-13 18:51  Yorg  阅读(4)  评论(0编辑  收藏  举报