[ABC257D] Jumping Takahashi 2 Solution

更好的阅读体验戳此进入

题面

给定 n 个不共点的蹦床,第 i 个蹦床的位置为 (xi,yi),反弹力为 pi。存在整数 S。定义能从第 i 个蹦床跳到第 j 个蹦床当且仅当 pi×S|xixj|+|yiyj|。你需要钦定一个起点,使得可以从该蹦床抵达所有蹦床(可以多步),并最小化 S,输出最小值。

Solution

不难发现问题可以转化为,我们要选择一个点,求使得这个点能够到达其它所有点的最大代价,然后求所有起点最大代价的最小值,这东西有点像全源最短路,且数据范围很小。于是不难想到一步转化,可以将原不等式转化为 S|xixj|+|yiyj|pi,显然 S 存在单调性,所以自然可以令 S=|xixj|+|yiyj|pi。于是可以认为 ij 的边权即为这个,然后跑一遍 FLoyd,维护每个源点的最大值,最后取个最小值即可,复杂度 O(n3)。当然不用 Floyd,或者改用 bfs + 二分答案,都是可以做到 O(n2logn) 的,不过意义不大。

Code

UPD

update-2022_12_09 初稿