dfs序与树链剖分

DFS序、树链剖分题目练习 目录 DFS序: POJ3321 Apple Tree HDU3887 Counting Offspring CF620E New Year Tree CF383C Propagating tree 树链剖分: POJ2763 Housewife Wind HDU2856 How far away ? CF343D Water Tree POJ3237 Tree HDU3966 Aragorn's Story DFS序: POJ3321Apple Tree 题意:有一颗苹果树,苹 阅读详情

dfs序

dfs序是对于一棵树而言,我们dfs的顺序。
主要目的是用于对一棵树上的结点形成一个数组,可以用于建线段树等操作。
在dfs序中,每个节点只出现一次(欧拉序每个节点出现两次)。
在这里插入图片描述
比如者一棵树的dfs序为 ABCDEF

时间戳

每个节点第一次被访问的时间

dfs序的性质

父节点的时间戳小于子节点的时间戳

树链剖分

可以解决的问题

对于树上两个节点 u,vu, vu,v
1、将路径 uuu 到 vvv 上的点都加上一个值
2、求路径 uuu 到 vvv 所有点的权值和
3、将节点 uuu 为根的子树都加上一个值
4、求节点 uuu 为根的子树所有点的权值和

重儿子

一个节点的子节点所在的子树中节点最多的子节点为重儿子

轻儿子

除重儿子以外的所有儿子

重链剖分

以重儿子优先的dfs序,将一棵树剖分为多个重链。每个重链以轻儿子开头,其余点都是重儿子。
对于树链剖分,我们需要记录以下几个值
dfn[x]dfn[x]dfn[x] dfs序
fa[x]fa[x]fa[x] 父节点
sz[x]sz[x]sz[x] 节点大小
top[x]top[x]top[x] 所在链的首节点
son[x]son[x]son[x] 重儿子
dep[x]dep[x]dep[x] 深度

我们需要进行两次dfs,第一次求出 fa sz son depfa \ sz \ son\ depfa sz son dep 的信息,第二次dfs求出 top dfntop \ dfntop dfn

求LCA

因为我们知道了每个节点的深度和所在重链的情况。所以我们可以这样考虑。
当两个点在同一条重链的时候,此时的 lcalcalca 即为深度较浅的点。
当两个点不同一条重链的时候,此时让所在重链首节点较深的点往上跳,跳出它所在的这一条重链。

int LCA(int x, int y){
	while(top[x] != top[y]){
		if(dep[top[x]] > dep[top[y]]) swap(x, y);
		y = top[y];
		y = fa[y];
	}
	return dep[x] > dep[y] ? y : x;
}

性质

一个重链的dfs序是连续的

如何解决上述四个操作

操作1、2
用dfs序的时间戳建立线段树,然后我们在两个点的 LCALCALCA 的过程中更新线段树即可。
操作3、4
我们直接用dfs序和节点 xxx 的子树大小即可更新线段树,更新区间为
[dfn[x],dfn[x]+sz[x]−1][dfn[x], dfn[x] + sz[x] - 1][dfn[x],dfn[x]+sz[x]−1]

2024 全国大学生新质生产力大赛 B:金融违规交易的大数据分析 问题四思路代码 问题四:请分析附件中所有的指标数据,选取合适的指标,建立“金融违规 洗钱交易的预测模型”,并选取合适的训练集和测试集,计算预测模型的准确率。 为了提前识别并预测金融违规洗钱的交易事件,请基于你们团队数据分析的结果, 分别给公安部门和银行机构提出你们的建议。 阅读详情

相关推荐

城市NOA加速落地,BEV+Transformer引领自动驾驶感知新范式

数据闭环能力的建立,不仅依赖于数据规模,还依赖于数据的筛选、回传、标注、训练、验证与再部署,数据之于自动驾驶的价值再被印证的同时,也将推动自动驾驶迈向更为高阶的智能化时代。6月份,理想汽车向早鸟用户推送了首个不依赖高精地图的城市NOA。而特斯拉推出的基于BEV+Transformer的自动驾驶感知路线,可将2D图像转化为BEV鸟瞰图视角下的3D图像,并基于更庞大、更复杂、参数更多的感知算法模块,利用Transformer的注意力机制,将各个传感器统一到同一个连续的四维(三维空间+一维时间)时空中。

manfukeji的博客 1396

【知识总结】dfs序 树链剖分

【牛客】2020牛客暑期多校训练营(第七场)C- A National Pandemic 又是死磕一个算法的过程(雾) 一、前置知识 视频:传送门1 传送门2 dfs序和树链剖分两者都借助hash的思想是将树形转化成线性的算法,前者主要处理子树问题,后者主要处理链的问题。 1.dfs序 **定义:**顾名思义是按照dfs的顺序标号。 **重要性质:**每棵子树内的标号都是连续的,某些链的标号也是连续的。 代码: int timetmp;///时间戳,计数器 int in[maxn];///表示dfs进某节点

我们都有光明的未来 303

基于深度学习的中文方言识别模型训练实战

本文介绍了一个基于深度学习的中文方言识别模型开发流程。项目采用PyTorch框架和Chinese-BERT-wwm预训练模型,构建了包含BERT基础层、方言特征增强层和注意力机制的多方言分类系统。文中详细阐述了数据收集策略,包括从社交媒体、语料库和众包平台获取多源数据,并实现了文本清洗、同义词替换和回译等数据增强技术。模型架构部分展示了如何在BERT基础上添加方言特征提取层和多头注意力机制来提升识别性能。该方案支持普通话、粤语等6种主要方言的识别,目标准确率达90%以上,响应时间小于100ms,适用于智能客

电脑管家 1729

dfs序和树链剖分

dfs序和树链剖分 总结 dfs序和树链剖分是把树形结构映射成线性结构,然后通过例如线段树这样的数据结构维护区间信息 dfs序是对树上节点进行dfs排列生成新的编号,其优点在于每一棵树/子树的编号是连续的,这样可以方便的进行任意子树的修改 树链剖分是一种以重链/重边作为dfs优先遍历,这样不单单能够对任意子树进行修改,还能对树上两节点之间的简单路径进行方便的修改。后者的操作是每次修改(...

weixin_38168590的博客 216

保姆级教程:用Zemax 18.9复现单模光纤耦合仿真(附康宁SMF-28e参数)

本文提供了一份详细的Zemax 18.9单模光纤耦合仿真教程,以康宁SMF-28e为例,涵盖从软件设置、材料参数输入到系统构建和优化的全流程。通过光束耦合分析和物理光学传播(POP)技术,帮助用户准确模拟光纤耦合效率,并解决常见问题,适用于光学设计初学者和专业人士。

weixin_27330481的博客 313

Stata实战:DID平行趋势检验完整操作指南(附reghdfe+coefplot代码)

本文提供了一份使用Stata进行DID平行趋势检验的完整实战指南。文章详细讲解了从数据准备、生成相对时间变量,到利用reghdfe命令构建动态效应模型,以及使用coefplot命令进行结果可视化的全流程操作。核心在于通过检验政策前交互项的显著性,验证处理组与对照组是否满足平行趋势假设,为后续因果推断奠定可靠基础。

weixin_29231725的博客 1380

DFS序——树链剖分前驱知识

目录 定义:dfs序:每个节点在dfs深度优先遍历中的进出栈的时间序列。   性质:dfs序可以把一棵树区间化,即可以求出每个节点的管辖区间。 对于一棵树的dfs序而言,同一棵子树所对应的一定是dfs序中连续的一段。 dfs序的七个基本问题: 定义:dfs序:每个节点在dfs深度优先遍历中的进出栈的时间序列。  定义两个数组,in[x],out[x]。dfs从根结点开始,每个结点分别...

8713

f103vet6 SD卡SDIO+DMA配置避坑指南:从初始化卡死到稳定读写的全流程解析

本文详细解析STM32F103VET6芯片SD卡SDIO与DMA配置中的常见问题,从初始化卡死到读写不稳定的全流程解决方案。重点分析总线宽度配置、时钟分频调整及DMA通道管理技巧,帮助开发者避开常见陷阱,实现稳定高效的数据存储。

u0v1w2x3的博客 666

没事找事写算法(1)---浅谈树链剖分及DFS序

复习 求LCA 树上差分 引入 正题 DFS序 例子 BZOJ4034 树链剖分 例子 求LCA 洛谷P3384树链剖分模板 总结 复习 求LCA LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先。通常我们会用倍增的方式来进行求解。 树上差分 可以修改一个点到树根的距离,

fy_23forever的博客 1049

黑猫带你学UFS协议第17篇:UFS安全模式详解(Secure Mode)

本文详细介绍了UFS协议中的安全模式,包括Erase, Discard, Purge和Wipe Device操作。Erase用于永久删除数据并确保无法恢复;Discard不保证数据清除;Purge类似于Sanitize,清除内部未映射的物理块数据;Wipe Device则是格式化设备。这些操作涉及逻辑单元、擦除单位、相关寄存器配置等,确保数据安全。" 126036669,12409270,MySQL 8.0 开窗函数详解,"['数据库理论', 'SQL']

黑猫奥利奥的博客 2559

实战神器指标解析 篇四:主力吸筹指标及其分析和使用说明

主力可能会进行多次吸筹,因此需要根据黄色趋势线来判断是否有转强的变化。一旦出现转强的迹象,这通常意味着吸筹已经接近尾声,即将进入拉升前期。此时可以介入进行建仓。该股票指标通过分析价格变动的方式,能够精确跟踪并标识主力的吸筹行为。当底部出现多根洋红色柱子时,这通常表示出现了主力吸筹的指示。这段代码主要用于分析股票的底部吸筹情况、趋势和涨跌情况。

生活在别处 6216

[论树剖与DFS序的正确姿势]

树链剖分小结

_Horizon 1823

ArduPilot简介

一,什么是ArduPilot? ArduPilot是一个可信的,多用途的,开源的自动驾驶系统。该系统支持了非常多的交通工具类型,包括多旋翼无人机,传统直升机,固定翼飞行器,船,潜艇,巡逻车等。源码由大型开发者社区的专家和爱好者共同开发和维护。也欢迎更多的开发者加入源码的迭代演进,最好的“打开”方式就是加入开发者团队论坛。该论坛对所有人开放,在这里可以深入感受到开发者们对ArduPilot的热爱。 论坛链接:ArduPilot Discourse 开发者指南:Welcome to the ArduPil

从0到1,突破自己 5451

DFS序与树链剖分入门

本文系统介绍了树链剖分算法及其在树结构数据处理中的应用。主要内容包括:1. 基础概念:详细解释了DFS序的定义、性质及其在将树结构转化为线性结构中的作用,包括子树连续性、括号化定理等关键性质。2. 重链剖分:重点阐述了重链剖分的核心思想,通过定义重儿子、轻儿子、重边、轻边等概念,将树分解为O(logn)条重链,实现路径查询的高效处理。3. 算法实现:给出了完整的预处理和查询实现模板,包括两次DFS遍历、线段树维护以及路径/子树更新查询的具体方法。4. 复杂度分析:论证了算法的时间复杂度(预处理O(n)

Mark1277的博客 1165

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

简单dfs序 + 树链剖分

树链剖分 DFS序 先来讲一讲DFS序是什么东西,直接上图,方便理解。 估计巨巨们应该知道了DFS序的两个重要的东西,in,outin,outin,out数组。 ininin数组就是这个点进入DFS的时间。 outoutout数组就是这个点退出DFS递归栈的时间。 这个时间要注意,当有点进入的时候才加,没有点进入的时候不加也不减。 所以我们发现一个节点的子树的遍历是将,刚好是区间[in,out][in, out][in,out],所以这里我们就可以通过线段树或者树状数组来维护其子树的节点权值以及节点权

lifehappy 607

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

基础 DFS序、树链剖分

DFS序和树链剖分都是在树的前提下才有效的。 DFS序 DFS,即对树进行DFS时遍历的顺序。记录每个点被遍历之前遍历过的点数 ininin 和遍历完以该点为根的子树后遍历过的点数 outoutout。若点 vvv 为 uuu 子树中的点,则一定满足 inu⩽inv⩽outuin_u \leqslant in_v \leqslant out_uinu​⩽inv​⩽outu​。因此任意一点 uuu 的子树可以用区间 [inu,outu][in_u,out_u][inu​,outu​] 来表示。 求DFS序模板

Defener的博客 305

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

dfs序 与 树链剖分 例题 Distance on the tree

dfs序和熟练剖分本质上是hash,将树型结构转换成线性结构 熟练剖分是dfs序的一种 dfs序 就是dfs遍历点的顺序,对于二叉树就是其中序遍历的顺序,如图红色序号 特点:一颗子树的序号是连续一段序号,比如1的左子树(2,3,4)右子树(5,6,7,8) 然后我们记录一个in[x], out[x],表示子树的开始和结束编号,具体看代码 void dfs(int x, int f...

Adolphrocs的博客 457

CodeForces 343D Water Tree 树链剖分+DFS序

Water Tree 这是一道树链剖分+DFS序题,较为典型且易于思考。 树链剖分的经典模板就是按照DFS序建立线段树,只要在第2次DFS时顺便记录每个结点的入序和出序即可,为操作1提供了方便。 操作1是把一个结点的所有子结点全部注水,这一操作即为DFS序的经典操作,这里不再赘述。 操作2是把一个结点及其所有父结点的水清空,我们可以沿着重链不断攀升,每次修改一整条链,直至到达根结点为止。 ...

caiyiwen's ACM/ICPC Zone 277

dfs序+树链剖分 入门,总结一下自己所学与所想与做过的一点例题

dfs序,就是按照dfs的顺序遍历一棵树,然后用其路径代表这棵树,化为字符串以便操作。 dfs遍历顺序如下: 路径如下: 跟先序遍历差不多 对于任何一棵子树来说,其序号都是相连的,比如以2为根节点的子树 这样就为我们处理子树问题提供了方便,对于2,我们可以用in数组来记录其进入子树(也就是第一次遍历到2)的时候,然后用out数组来记录其退出子树的时间,那么对于这颗子树,我们就...

forOnward的博客 359

CodeForces - 343D Water Tree 树链剖分+线段树+dfs序

题目链接:点击查看 题意:n个节点,原先都是空的,1,x 让x的所有孩子包括x都变成满的,2,x 让x的所有父辈加上x都变成空的,3,x 询问x这个节点是满的还是空的,满的输出1,空的输出0 题解:对应1操作,我们dfs序一下即可,对于2操作我们用树链剖分来解决,然后直接查询即可 #include<bits/stdc++.h> using namespace std; type...

还我笑颜 290

BZOJ 4034: [HAOI2015]树上操作【树链剖分】【DFS序】

Description有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。题解显然,树链剖分的序也是DFS序,直接维护就可以了。代码#include<cstdio> #include<

Sdywolf的博客 428

DFS序

树状数组 应用:区间求和。 时间复杂度:处理O(logn),查找O(logn) 拓展:二维树状数组。应用—矩阵求和。 注意事项:树状数组的下标是1.……n的数组,因为lowbit(0)=0,会陷入死循环。 lowbit(int x) { return x&(-x); } //单点增加 void modify(int pos,int data) { for(int i=pos;i<=n;i+=low(x)) { a[i]+=data; } } //区间求和 int s

zhaochuanfei666的博客 177

【dfs序】【线段树】树链剖分换根

【题目描述】 给定一棵大小为 n 的有根点权树,支持以下操作: • 换根 • 修改点权 • 查询子树最小值 【输入】 第一行两个整数 n, Q ,分别表示树的大小和操作数。 接下来n行,每行两个整数f,v,第i+1行的两个数表示点i的父亲和点i的权。保 证f &amp;lt; i。如 果f = 0,那么i为根。输入数据保证只有i = 1时,f = 0。 接下来 m 行,为以下格式中的一种: • V x y...

weixin_44111457的博客 712

[BZOJ - 2819] Nim 【树链剖分 / DFS序】

题目链接: BZOJ - 2819 题目分析 我们知道,单纯的 Nim 的必胜状态是,各堆石子的数量异或和不为 0 。那么这道题其实就是要求求出树上的两点之间的路径的异或和。要求支持单点修改。 方法一:树链剖分 这道题用树链剖分显然是可以做的,并且也很好写。我刚开始写完之后又 WA 了,又是线段树写错了!!这次是建树的时候写错了! Warning!Warning! 代...

weixin_30344131的博客 68

hdu5405(dfs序+树链剖分+线段树)

题解:因为我要查询有多少,i到j的路径上有与u到v路径上的公共点,那么我们可以先求没有经过u到v路径的上点的平方的总和然后再用所有点权值的总和的平方减去他,那么就是答案。然后我们怎么操作能?因为用树链剖分的话不会经过的点的对应的轻儿子的结点,所以我们记录一些对应轻儿子的权值平方的总和,然后我们如果某链往另外一条链上跳的话说明我这个点是那个点的轻链,我们再补回去就好了,然后还有一种情况是我重儿子没有...

Soul 404

2018.11.05【校内模拟】相交(DFS序)(树状数组)(用来对拍的树链剖分)

传送门 解析: 首先怎么判断树上两个路径相交,其中一条路径的LCALCALCA必然在另外一条路径上。 所以问题变成了,新增一条路径,询问有多少其他路径的LCALCALCA在它上面,询问它的LCALCALCA在多少其他路径上面。注意处理LCALCALCA重合的情况。 这个显然的做法就是维护两个线段树,然后树链剖分维护路径加,单点求值和单点加...

anlongyi8087的博客 117
上一篇: 2021牛客多校第三场 B——Black and white
下一篇: 2021杭电多校第二场 1002——I love tree
Linda_yezi_coder
博客等级 码龄7年 20粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值