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})\) 的。

posted @ 2025-09-18 23:18  adam01  阅读(28)  评论(0)    收藏  举报