Note - 线段树优化建图

本文将成为 线段树的应用 的一部分。

适用场景

\(i\) 向区间 \([l, r]\) 连边或区间 \([l, r]\) 向点 \(i\) 连边。区间向区间连边其实也可以,建虚点就行了。

本体

可以发现点 \(i\) 向区间 \([l, r]\) 连边单次是 \(\mathrm{O}(n)\) 的。现在考虑怎么优化这个东西。

于是我们建立一个类似于线段树的东西。具体地,我们像线段树一样划分区间,然后从父亲节点向子节点连边。这棵树有时会被称为“出树”。

线段树查询的本质是把一个区间分成 \(\mathrm{O}(\log n)\) 个区间然后再合并它们。当我们要从 \(i\)\([l, r]\) 连边,我们就在线段树上把 \([l, r]\) 分成 \(\mathrm{O}(\log n)\) 个区间,然后对这些区间对应的点连边就行了。

区间 \([l, r]\) 向点 \(i\) 连边同理,建树时从子节点向父亲节点连边就行了。这种树一般被称为“入树”。

当然也有需要把边挂在线段树上维护的情景,比如 Luogu P7214。

例题

  • CF786B,Luogu P5025,Luogu P7214
posted @ 2026-02-09 17:45  Hootime  阅读(14)  评论(0)    收藏  举报