线段树优化建图

使用场景

单点向区间、区间向单点,区间向区间建边

实现原理

用线段树的一个节点管辖一段图上区间的顶点

实现步骤

  1. 将原图中的顶点拆点,出点和入点;
  2. 建立两棵线段树,出点的树 \(otree\) ,入点的树 \(itree\)
  3. 出点的树由子节点连向父节点,边权为 \(0\) ,入点的树由父节点向子节点连边,边权为 \(0\)

使用方法

  1. 单点 \(x\) 与单点 \(y\) 连边,则用出点的树上编号 \(out_x\) 连向 \(y\) 的入点 \(in_y\)
  2. 单点 \(x\) 向区间 \([lt, rt]\) 连边, \(out_x\) 向入树的根节点递归连边;
  3. 区间顶点 \([lt, rt]\) 向单点 \(x\) 连边,出树从根节点递归向 \(out_x\) 连边;
  4. 区间 \([lt, rt]\) 向区间 \([lt2, rt2]\) 连边,虚拟一个节点 \(v\) ,时间复杂度 \(O(2\log_N)\)
posted @ 2023-01-14 20:24  SenGYi  阅读(75)  评论(0)    收藏  举报