首页 > 其他分享 >P8025 【树链剖分求祖先】

P8025 【树链剖分求祖先】

时间:2024-04-04 23:34:15浏览次数:27  
标签:dep top 剖分求 P8025 树链 int

P8025 【树链剖分求祖先】

这题的题意简单,简单分类讨论一下这里就不赘述了。最后题目就简化成求一个点的 \(k\) 级祖先。

开始会的解法是倍增,但是常数过高被卡了。

常数更优秀的做法是树剖,每一次跳树链,最后可能有一条链太长只能跳一部分,这是因为树链剖分的 \(dfn\) 序是有序的,即每条链占的是一段区间,所以直接查询 \(dfn\) 数组即可。

int jump(int u, int t) { //从 u 点往上跳 t 次
	while(t > 0) {
		if(t - (dep[u] - dep[top[u]] + 1) >= 0) t -= dep[u] - dep[top[u]] + 1, u = fa[top[u]];
		else break;
	}
	return wt[id[u] - t];
}

标签:dep,top,剖分求,P8025,树链,int
From: https://www.cnblogs.com/FireRaku/p/18115324

相关文章

  • P3384 【模板】重链剖分/树链剖分
    原题链接题解dalao‘sblog我自己的认识请看代码区code#include<bits/stdc++.h>usingnamespacestd;intn,Q,root,mod;intbigson[100005];//和自己在同一条链上的儿子节点vector<int>G[100005];intsizes[100005];//主要是为了求子树大小,经过验证选择哪一个儿子节点......
  • 树链剖分
    重链剖分【模板】重链剖分/树链剖分upd:每条重链必定由轻儿子开始,不同重链间必定由轻边连接,重链之内必定是重边。如果只有一次询问的话显然可以树上差分来解决,现在考虑多组询问。处理fa[i]dep[i]便于询问。处理size[i]son[i]top[i]idx[i]f[i]便于树剖。明确一下树剖......
  • 【算法与数据结构】二叉树链式结构的实现【前中后序】
    文章目录......
  • 树链剖分【loj模板】(〃>目<)
    小声吐槽:如果不是拍了200000组没问题后瞪眼瞪出来了,我才不写呢Decribe:给定一棵\(n\)个节点的树,初始时该树的根为\(1\)号节点,每个节点有一个给定的权值。下面依次进行\(m\)个操作,操作分为如下五种类型:换根:将一个指定的节点设置为树的新根。修改路径权值:给定两个节点......
  • 树链剖分笔记
    树链剖分+线段树代码量通常在3K左右,出错的地方非常多,为了好好练手,特建立该题单,建议不要进行复制每一题都老老实实重打题单博客题单Orz1.区间加,区间修改,区间最大值#include<bits/stdc++.h>usingnamespacestd;constintMX=1e5+10;intn,m,r,p;intinput[MX]={0};intsiz[......
  • 树链剖分
    树链剖分1基础理论1.1基础概念在树链剖分中,我们将会遇到如下的名词,在此先做以解释:重儿子:对于一个子节点$u$如果$v$是其儿子,且$v$的子树大小是节点$u$的儿子中最大的,则称$v$是$u$的重儿子。轻儿子:除了重儿子以外,就是轻儿子。重链:除顶部以外,其余节点都为重儿子......
  • 树链剖分学习笔记
    树链剖分学习笔记树链剖分的思想及能解决的问题树链剖分用于将树分割成若干条链的形式,以维护树上路径的信息。具体来说,将整棵树剖分为若干条链,使它组合成线性结构,然后用其他的数据结构维护信息。树链剖分(树剖/链剖)有多种形式,如重链剖分,长链剖分和用于Link/cutTree的剖分(......
  • P3384 【模板】重链剖分/树链剖分 - SGT && 重链剖分
    本题是非常非常非常纯粹的树剖,利用了重链剖分后下标的性质不多说上代码就好了#include<cstdio>#include<vector>#definelllonglongusingnamespacestd;constintN=1e5+5;intn,m,r;llp,a[N],b[N];vector<int>V[N];intfa[N],dep[N],siz[N],hson[N]......
  • 树链剖分
    树链剖分分为重链剖分和长链剖分重链剖分首先是重链剖分,树链剖分顾名思义是一种将代码大小增加1k树剖成一条条链的方法。定义:重儿子该节点所有儿子中以该儿子为根的子树最大的儿子重边连接该节点与该节点的重儿子的那条边重链由根节点或一个轻儿子为链头一路重边连到叶......
  • 树链剖分
    看逆天算法,品百味OI#41.重链剖分给出如下定义:重子结点:一个点的子节点中子树最大的点轻子节点:剩余的子节点重边:该节点到重子节点的边轻边:到轻子节点的边重链:若干条首尾相接的重边预处理由两个DFS实现DFS1:记录节点的父节点、深度、子树大小、重子结点DFS......