建图优化

本文由ai生成

一、主要优化建图技术

1. 线段树优化建图

  • 适用场景:区间到区间/点到区间/区间到点的连边
  • 实现原理
    • 构建入树(叶子→原图点,父→子)和出树(原图点→叶子,子→父)
    • 通过虚点中转,将区间拆分为 \(O(\log n)\) 个节点
  • 复杂度:点数 \(O(n)\),边数 \(O(n + m \log n)\)
  • 例题CF786B Legacy(最短路)、P5025 炸弹(强连通分量)

2. 猫树/ST表优化建图

  • 适用场景:高频区间连边(\(k\) 极大时)
  • 实现原理
    • 利用ST表的区间可重叠特性实现 \(O(1)\) 单次连边
    • 结合分块:块内建ST表,总复杂度 \(O(n \log \log n)\)
  • 优势:适合 \(k \geq 10^6\) 的场景

3. 前后缀优化建图

  • 适用场景:前缀/后缀相关连边
  • 实现原理
    • 建立前缀虚点链 \(s_i \to s_{i+1}\) 和后缀虚点链 \(p_i \to p_{i-1}\)
    • 操作转化为虚点间 \(O(1)\) 连边
  • 复杂度:严格 \(O(n)\) 边数
  • 例题P6378 Riddle(2-SAT)

4. CDQ分治优化建图

  • 适用场景:偏序关系连边(\(y < x\)\(a_y \le a_x\)
  • 实现原理
    • 分治中对值域排序建虚点链
    • \([l, mid]\) → 虚点 → \([mid+1, r]\)
  • 复杂度:点/边数 \(O(n \log n)\)

5. 主席树优化建图

  • 适用场景:带权值限制的区间连边
  • 实现原理
    • 权值离散化后建主席树
    • 原图点向主席树节点连边
  • 复杂度\(O(n \log n)\)(树套树 \(O(n \log^2 n)\)

6. 分层图优化

  • 适用场景:状态转移问题(如k次免费)
  • 实现原理
    • 创建 \(k+1\) 层相同图结构
    • 层间连边表示状态转移
  • 经典问题:[JLOI2011] 飞行路线

二、扩展与进阶技巧

1. 分块优化建图

  • 块内ST表优化 + 块间普通连边
  • 复杂度 \(O(n \log \log n)\)(线段树与ST表的折中)

2. 虚点简化技巧

  • 应用场景
    • 多点到同一区间:点→虚点→区间
    • 点集到点集:避免 \(O(n^2)\) 连边

3. 不显式建图优化

  • 适用场景:边动态生成无法预存
  • 实现原理
    • Dijkstra中实时查询可达点
    • 用线段树维护未访问点集
  • 例题P5471 弹跳

4. 其他数据结构组合

  • KD树/树套树:高维空间连边
  • 树链剖分+线段树:树上路径→区间问题

三、方法对比与选择指南

方法 适用问题 边数复杂度 优势 局限
线段树 区间连边 \(O(m \log n)\) 通用性强 常数较大
前后缀优化 前缀/后缀连边 \(O(n + m)\) 线性边数 仅限前后缀操作
CDQ分治 偏序关系连边 \(O(n \log n)\) 解决二维偏序 需离线处理
分层图 带状态转移的最短路 \(O(k(m + n))\) 直观易实现 层数多时空间爆炸
不显式建图 动态边生成 依赖查询数据结构 避免存储巨量边 需复杂数据结构支持
posted @ 2025-07-22 20:57  wmq2012  阅读(126)  评论(0)    收藏  举报