线段树优化建图
使用场景
单点向区间、区间向单点,区间向区间建边
实现原理
用线段树的一个节点管辖一段图上区间的顶点
实现步骤
- 将原图中的顶点拆点,出点和入点;
- 建立两棵线段树,出点的树 \(otree\) ,入点的树 \(itree\) ;
- 出点的树由子节点连向父节点,边权为 \(0\) ,入点的树由父节点向子节点连边,边权为 \(0\) ;
使用方法
- 单点 \(x\) 与单点 \(y\) 连边,则用出点的树上编号 \(out_x\) 连向 \(y\) 的入点 \(in_y\) ;
- 单点 \(x\) 向区间 \([lt, rt]\) 连边, \(out_x\) 向入树的根节点递归连边;
- 区间顶点 \([lt, rt]\) 向单点 \(x\) 连边,出树从根节点递归向 \(out_x\) 连边;
- 区间 \([lt, rt]\) 向区间 \([lt2, rt2]\) 连边,虚拟一个节点 \(v\) ,时间复杂度 \(O(2\log_N)\)

浙公网安备 33010602011771号