BZOJ4456 [Zjoi2016]旅行者

好神的分治做法我们把矩形顺着比较短的一边从中间切成两半,从这条中线上每个点做一次到这个矩形内每个点的dijkstra,把两个端点都在这个矩形里的询问用中线上每个点到两个端点的最短路更新,然后分治两半边复杂度分析:瞎YY一下我们知道这个算法每次更新答案要做比较小的一边的边长次dijkstra,所以当是一个正方形的时候分治的复杂度最高,而询问一定是传到底的时候复杂度最高因为每次切一半两边都
摘要由CSDN通过智能技术生成

好神的分治做法

我们把矩形顺着比较短的一边从中间切成两半,从这条中线上每个点做一次到这个矩形内每个点的dijkstra,把两个端点都在这个矩形里的询问用中线上每个点到两个端点的最短路更新,然后分治两半边

复杂度分析:瞎YY一下我们知道这个算法每次更新答案要做比较小的一边的边长次dijkstra,所以当是一个正方形的时候分治的复杂度最高,而询问一定是传到底的时候复杂度最高

因为每次切一半两边都是一样的,所以每个询问只要传到底,不管往哪边传都可以,为了方便分析不妨设每个询问往两边各传一半

T(n,m,Q)表示短边长为n,长边长为m,矩形里有Q个询问的复杂度,T(n,Q)表示边长为n,里边有Q个询问的正方形的复杂度


把最后的式子化简一下,面积为S的话,复杂度是O(S*sqrt(S)*log S)的

#includ
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值