线段树优化建图
连边的复杂度一般而言是 \(O(1)\),但是当连边的对象是一个区间内的点时我们还是需要更优的方法。
线段树优化建图就是一种借助线段树结构,来达到建图空间换建图时间效果的建图方式。
想到区间,就会想到树链剖分。这也是线段树优化建图的一大配合。
线段树上的边分两类:向上连的边,可以优化连出的边,向下连的边,可以优化连入的边。这是线段树优化的基础。
单点连单点
这还要讲?
单点连区间
构造一棵线段树,线段树上父亲向两个儿子连边。每一次连区间,就把下标为这个点的叶子节点像线段树区间加一样连到各个代表区间的节点即可。
像这样建出线段树:
我们想要连 \(1\) 到 \([3,8]\) 的边:
区间连单点
与上面类似,构造一棵线段树,线段树上两个儿子向父亲连边。每一次连区间,就把各个代表区间的节点像线段树区间加一样连到下标为这个点的叶子节点即可。
区间连区间
你可能想到了建一棵向下连的线段树,建一棵向上连的线段树,然后树上的点连边。但问题在于树上的点要两两连边,这样子我们建线段树的意义不就消失了吗。。。
于是我们建一个虚点,所有向上连(连出去)的点连向虚点,虚点连向所有向下连的点,以此达到连边的目的。