(含题解剧透慎入)关于题解的解释与一些经典错误

P3350 [ZJOI2016] 旅行者

Aaronwrq @ 2023-08-14 16:14:44

本题前几篇题解不够详细,建议再看看tzc_wk 的题解。

Q:用分割线上的点更新答案有什么用?
A:对于跨越分割线的询问,其最短路径必定经过分割线,用分割线上的点更新答案后,这些点的答案就已经确定,无需继续进入递归。
对于不跨越分割线的询问,把询问按分割线分开。对于分割线每一侧的询问,有两种情况:第一种为最短路径经过分割线,第二种为最短路不经过分割线。最短路经过分割线的在枚举分割线上点时就已经被解决,递归时只需要处理不经过分割线的情况。由于不经过分割线,对于这些询问,分割线对面的那一半就可以直接扔掉,于是长或宽的规模减半。

Q:此题如何卡常?
A:其实不用卡。开了O2用dij可以稳过,加上题解的最短路上界优化可以轻松把时间最长的点降到700ms以内。不开O2很难。

Q:为什么我WA了?
A:如果你求出的最短路与答案完全不同,请优先检查最短路算法。如果你求出的最短路有些正确,有些大于答案,那么有两种可能的错误:
1.只更新了跨越分割线的答案。不跨越分割线的答案也可能经过分割线再回去。
2.将函数内变量写成全局变量。每次调用时递归函数时全局变量都会被更新,可能导致传参错误。我因为这个问题调了一下午。全局变量不安全,警钟长鸣。

Q:还是不理解/代码出错
A:请仔细看题解或比对题解代码。不要只盯着前几篇题解。


by liugh_ @ 2024-07-28 10:19:25

@xiezheyuan /bx


by liugh_ @ 2024-07-28 10:20:12

不跨越分割线没更新/bx


上一页 |