lca即最近公共祖先,倍增法可以在O(n)的预处理后以每次logn的代价进行查询操作。
思路:预处理出fa[n][i]数组,表示第n号点的第(1<<i)个父亲,之后在寻找u、v的lca时,可以对二进制上的每一位进行向上跳跃。
例题:cf1304E
给出一棵树,有q个询问,格式(x,y,a,b,k)。意为对x,y点连边,求问此时从a到b有无一条长为k的路径,边可以重复走。
分析:边可以重复走说明如果一条路径长度小于k,且与k奇偶性相同,那么就可以重复走某些边来满足要求。添加bian(x,y)后,我们一共有三条可行的基础路径(a,b)、(a,x)+1+(y,b)、(a,y)+1+(x,b)。依次检查即可。
1 |
|