solution-arc158e

[ARC158E] All Pair Shortest Paths

还是挺牛逼的一题。但是为什么其他题解都说很板?看来还是我太菜了,见的题太少了。

主要参考 @TeneryTree

image

首先考虑 CDQ 分治,只考虑处理 \([l,mid]\) 中的到 \([mid+1,r]\) 这些点的路径和。

由于列数 \(m=2\) 所以我们考虑设 \(f_{i,0/1}\) 为左边的点 \((i,0/1)\)\((mid,0)\) 的最短路距离,右边的点 \((i,0/1)\)\((mid+1,0)\) 的最短路距离。设 \(g_{i,0/1}\) 为左边的点 \((i,0/1)\)\((mid,1)\) 的最短路距离,右边的点 \((i,0/1)\)\((mid+1,1)\) 的最短路距离。显然这两玩意每次直接 \(O(n)\) 递推即可。

然后考虑一下跨区间的贡献是什么。设贡献为 \(w\) 则有:

\[w = 2\sum\limits_{i=l}\limits^{mid}\sum\limits_{j=mid+1}\limits^{r} \min ( f_{i,0/1} + f_{j,0/1},g_{i,0/1} + g_{j,0/1}) \]

这玩意看着好像不太好直接计算。也不太知道怎么想到的,考虑这样子做:

\[w = 2\sum\limits_{i=l}\limits^{mid}\sum\limits_{j=mid+1}\limits^{r} \{ \min ( f_{i,0/1} + f_{j,0/1} - g_{i,0/1}- g_{j,0/1},0) + g_{i,0/1} + g_{j,0/1} \} \]

然后拎出去!

\[w = 2\sum\limits_{i=l}\limits^{mid}\sum\limits_{j=mid+1}\limits^{r} \{ \min ( f_{i,0/1} + f_{j,0/1} - g_{i,0/1}- g_{j,0/1},0)\} + 4\sum\limits_{i=l}\limits^{mid}g_{i,0/1}\cdot(r-mid) + 4\sum\limits_{i=mid+1}\limits^{r}g_{i,0/1}\cdot(mid-l+1) \]

现在这个式子好看多了qwq。后面那一整串直接计算即可了。而前面那一串取值也只有两种情况,非常好搞。设前面那一串值为 \(2w_2\),一下省略 0/1 这一维。设 \(p_i = f_i - g_i\) 则有:

\[w_2 = \sum\limits_{i=l}\limits^{mid}\sum\limits_{j=mid+1}\limits^{r} \min (p_i+p_j,0) \]

\[= \sum\limits_{i=l}\limits^{mid}\sum\limits_{j=mid+1}\limits^{r}(p_i+p_j)[p_i>-p_j] \]

这玩意相当好弄,只需要排序二分一下做完了。

总的复杂度 \(O(n\log^2n)\)

code

posted @ 2024-01-25 21:56  WRuperD  阅读(8)  评论(0编辑  收藏  举报

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

这是一条自定义内容

这是一条自定义内容