好神的分治做法
我们把矩形顺着比较短的一边从中间切成两半,从这条中线上每个点做一次到这个矩形内每个点的dijkstra,把两个端点都在这个矩形里的询问用中线上每个点到两个端点的最短路更新,然后分治两半边
复杂度分析:瞎YY一下我们知道这个算法每次更新答案要做比较小的一边的边长次dijkstra,所以当是一个正方形的时候分治的复杂度最高,而询问一定是传到底的时候复杂度最高
因为每次切一半两边都是一样的,所以每个询问只要传到底,不管往哪边传都可以,为了方便分析不妨设每个询问往两边各传一半
T(n,m,Q)表示短边长为n,长边长为m,矩形里有Q个询问的复杂度,T(n,Q)表示边长为n,里边有Q个询问的正方形的复杂度
把最后的式子化简一下,面积为S的话,复杂度是O(S*sqrt(S)*log S)的
#includ