JOISC
JOISC2024
Day 1
~ A / P10430 $^?$
~ C / P10432 $^?$
Day 2
A / P10433 $^?$
太牛了!!
一开始的思路是简单的。对于不是第一个人的,一定是找到一个黑点,然后每轮花 \(2\) 步反复横跳。或者找到一对相邻黑点,每轮花 \(1\) 步反复横跳。设第 \(i\) 个人的代价是 \(f_i(x)\)。
于是问题变成,我们要枚举第一个人走过 \(\leq k\) 个黑点到达 \(t\) 的最短路 \(d_k(t)\)。这没法做啊?
但是我们观察到,\(f_i(x)\) 是凸的,因为其本质是一个 \(k=2\) 的一次函数和一个 \(k=1\) 的一次函数取 \(\min\)。
然后凸函数的和也是凸的。于是 \(F(x)=\sum_{i>1}f_i(x)\) 是凸的。
整点凸包的性质是,凸包非线上顶点只有 \(O(n^{2/3})\) 个!
考虑一个暴力:我们直接跑 bfs,暴力更新 \(d_k(t)\)。然后根据凸包的性质,我们加个剪枝:用 \(d_k(t)+1+F(k)\) 更新 \(ans_t\),如果 \(ans_t\) 被更新,才能入队继续更新,否则一定不优而停止更新。
我们发现,更新 \(ans_t\) 的 \(d_k(t)\) 和 \(F(k)\),注意到 \(F(k)\) 是凸的,所以 \(d_k(t)+1+F(k)\) 想要更新 \(ans_t\),当且仅当 \(\Delta d_k(t)+\Delta F(k)>0\),也就是只有 \(k\) 位于凸包顶点处才有可能更新。
复杂度是 \(O(n^{5/3})\) 的。

浙公网安备 33010602011771号