当前位置: 首页 > news >正文

网格图分治模型

若网格图面积为 \(S\),取短边分治,令分治层的复杂度和短边相关(一般是从短边上每个点出发对整个网格图 DP/搜索 之类的)。

因为短边长度 \(O(\sqrt S)\)(一般)一层复杂度是 \(O(S\sqrt S)\),总复杂度 \(T(S)=2T(S/2)+O(S\sqrt S)=O(S\sqrt S)=O(n^3)\)

例一:P6976

多次查询最短路,我们联想到网格图最短路的分治模型。

  • 如果行数(或者对称的列数)比较小,可以直接对列分治,从分界列上每个点为起点跑最短路,然后计算跨过分界列的查询。

  • 如果行列个数大概同阶,就选小的那边分治,同理计算。

以上两种做法都是沿用了一个思路:取一个不大的点集,让它们构成图的割集。从这个点集里每个点作为起点都跑一次最短路,用 "经过它们的最短路" 来更新答案,再递归入割开的每个块里继续处理。

有了这个想法本题就比较简单了。考虑取什么割集,比较好想到只要取一条对角线,然后从两个端点出发跑最短路,再递归进对角线两半就行了。那问题在于取什么对角线,如果取的对角线分出的两半大小很不均匀就炸了。

然后考虑取什么对角线是比较均匀的。一个自然的想法是找到圆心,取圆心所在三角形的三条边里划分最均匀的那条。

事实上这是对的,因为这三条边划分出来较大的部分一定是圆心所在部分,而较小的那部分都不相交,所以三个较小的部分里大小最大的一定超过 \(n/3\)。因此一次递归会划分为 \(1/3\)\(2/3\) 两个部分,一共 \(\log\) 层到底。

因为是没有边权的,所以求最短路 bfs 即可,复杂度 \(O((n+q)\log n)\)

注意如果有边权的话,就算起点终点位于同一边,但仍然可能存在起点跨过分界线再回来的最短路。


另外一种观察角度是注意到这个东西是个平面图,平面图那就自然考虑对偶图。然后发现对偶图上是若干个三角形作为点的。

手玩一下可以得出结论:对偶图是一棵树,且每个点的度数 \(\le 3\)。然后在对偶图上做边分治即可,就是和上面一样的过程。

http://www.jsqmd.com/news/50919/

相关文章:

  • Python内置的lru_cache装饰器实现缓存教程
  • 2025年轮胎品牌推荐:权威TOP10全球品牌综合排名
  • 详细介绍:Git分支合并实战指南:从feature到master,一文搞定全流程!
  • 北京墙体彩绘公司推荐香鲸艺术坊,行业排名遥遥领先!
  • 虚拟科学峰会推动技术交流创新
  • java---gradle配置国内镜像
  • 2025年11月南京装修公司综合实力排行榜(品牌智鉴榜推荐)
  • 揭开Claude Opus 4.5神秘面纱
  • Image图片组件基础加载与属性设置
  • 2025年新能源汽车轮胎推荐:独家负载与静音测评报告
  • 11月25日日记
  • CF370A-Rook, Bishop and King
  • 实用指南:基于“开源AI智能名片链动2+1模式S2B2C商城小程序”的会员制培养策略研究
  • 2025年越野轮胎推荐:十大专业品牌最新全地形解析
  • 11月25日
  • Switch大气层20-整合包1-9-0测试版
  • 2025年家用轿车轮胎推荐:权威综合排名与选购指南
  • 基于.net6的一款开源的低代码、权限、工作流、动态接口平台-系统安装篇
  • macOS开启自带的TFTP Server
  • AT_arc178_c [ARC178C] Sum of Abs 2
  • 几道树上计数问题
  • 接入层傻瓜机引起的VLAN间环路
  • 实用指南:线性回归中梯度下降的最终结果是否为全局最小解
  • 2025年安全的轮胎推荐:专业制动测评与选购攻略
  • MISC图片隐写
  • 逆序对数列-dp前缀和优化
  • php中的phar反序列化基础
  • 干扰素:定义、类型与科研应用全解析
  • AT_arc083_d [ARC083F] Collecting Balls 笔记
  • Spring IOC 源码学习一 基本姿势