线段树优化建图学习笔记

使用场景:单点向区间,区间向单点或区间向区间建边。
实现原理:用线段树的一个节点管辖一段图上区间的顶点。
实现步骤:

  1. 将原图中的顶点拆点(理论上,实际代码中不需要),出点和入点。
  2. 建立两棵线段树,出点的树和入点的树。
  3. 出点的树由子节点连向父节点,边权为 \(0\),入点的树由父节点向子节点连边,边权为 \(0\)

使用方法:

  1. 单点 \(x\) 与单点 \(y\) 连边,则用出点的树上编号 \(out_x\) 连向 \(y\) 的入点 \(in_y\)
  2. 单点 \(x\) 向区间顶点 \([lt,rt]\) 连边,\(out_x\) 向入树的根节点递归连边。
  3. 区间顶点 \([lt,rt]\) 向单点 \(x\) 连边,出树从根节点递归向 \(in_x\) 连边。
  4. 区间顶点 \([lt,rt]\) 向区间 \([lt2,rt2]\) 连边,虚拟一个节点 \(v\),转化为 \(2\)\(3\) 连边。
posted @ 2023-01-14 20:36  Forever1507  阅读(31)  评论(0编辑  收藏  举报