1LCA 对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u和v的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先。 有时lca可以帮助我们解决许多问题,包括树上路径,如何快捷并高效的求出lca就成了一个重要的问题。 2求解 2.1树上倍增
树链剖分是一种十分实用的树的方法,用来处理LCA等祖先问题,以及对一棵树上的节点进行批量修改、权值和查询等有奇效。 So, what is 树链剖分? 可以简单的理解为,将一棵树分成许多条不相交的链,每次我们只要得知链首,便可对该条链上所有的点用数据结构(like 线段树)进行相关操作。 首先,介绍最常用的轻重链剖...
对于要求树上两个点u,v的lca,(当两个点不在一条重链上的时候)我们可以每次先让链头深depth比较大的点进行移动,不在一条重链上直接将top更深的节点跳到链头的父节点u = fa[top[u]];,当两个点在一条重链上的时候,从深度的角度来看,深度比较小的就应该是祖先节点 intn,m,rt;structnode{intto;intnex;...