树上莫队

咱知道,莫队算法可以解决一些序列上区间的问题,但是那个树,它可不是一个序列哟。怎么办呢?不要紧,咱把树拍平,拍成一个序列就行了哟。

怎么拍呢?

记时间$D$,咱进入某一点$u$的时候打一个时间戳$I_u=++D$,出去的时候再打一个时间戳$O_u=++D$。

这样咱就得到了一个长度为$2N$,每个点都出现了两次的序列。就可以在这个序列上转移了。

查询的区间怎么转换呢?

当前查询的是$u-v$这条链,不妨设$I_u<I_v$。

如果$u=lca(u,v)$,区间为$[I_u,I_v]$或$[O_u,O_v]$。

否则,区间为$[O_u,I_v] \bigcup [I_{lca},I_{lca}]$。

posted @ 2017-12-28 16:37  p0ny  阅读(136)  评论(0编辑  收藏  举报