首页 > 其他分享 >两种欧拉序的区别

两种欧拉序的区别

时间:2024-10-14 17:44:59浏览次数:5  
标签:两种 构造方法 区别 dfs 访问 LCA 节点 欧拉

适用于 \(O(1)\) LCA 的欧拉序

构造方法:dfs 初次访问节点的时候的时候加入欧拉序,从某个子树访问完之后再次将该节点加入欧拉序。

大小:初次会额外访问一次根节点,并且每条边都会给两个端点贡献一次,故为 \(2n-1\)。

性质:两个节点的 LCA 在欧拉序上处于两个节点之间(虽然一个点在欧拉序上有多个位置,但是任取一个位置这个性质都是成立的),且深度在区间内所有点中是最小的。

据此我们使用 ST 表维护区间(深度)最小值即可 O(1) LCA。当然 dfs 序也能

适用于树上莫队的欧拉序

构造方法:dfs 初次访问时加入欧拉序,要往父亲回溯时再加入欧拉序。

大小:显然是 \(2n-2\)。

性质:记 \(x\) 第一次访问的时间戳在 \(fst_x\),第二次在 \(lst_x\),设 \(dfn_x<dfn_y\),在 \(x\) 到 \(y\) 的链上的点在欧拉序上的区间 \([lst_x,fst_y]\) 中出现了一次,其他的点出现了两次或零次。特殊情况,当 \(\operatorname{lca}(x,y)\not=x\) 时,它们的 lca 没有出现,需要特判。

据此我们可以在处理树上链查询某些特殊问题时(可树上莫队/有两两抵消性质的信息,如异或),将树拍到欧拉序上去使用数据结构去维护。

标签:两种,构造方法,区别,dfs,访问,LCA,节点,欧拉
From: https://www.cnblogs.com/dcytrl/p/18464679

相关文章

  • 欧拉openEuler、Linux系统-(9) 文件操作命令集
    (请关注,本文将不断更新...,添加实用技巧和操作实例)在Linux系统中,熟练掌握各种文件操作命令是非常重要的。下面为大家详细介绍50个Linux系统中常用的文件操作命令。一、文件查看类命令1.lsls命令用于列出目录内容。用法:ls[选项][目录或文件]选项解释:-l:以长格式显示......
  • python中多线程和多进程的区别
    希望在1分钟内完成500架无人机的路径规划任务,而目前A*算法在50架无人机的情况下需要10秒,意味着在不做优化的情况下处理500架无人机将需要大约100秒,超出你的指标要求。提升计算速度是关键。多线程和多进程是常用的加速方案,但它们在Python中的效果存在差异1、多线程Python的标准......
  • ‌集群与集中式部署的主要区别,集群、分布式、集中式、伪分布式的概念与区别
    主要区别在于它们对资源的利用方式和系统架构的不同。‌集中式部署将所有计算资源和数据集中在一台或多台服务器上,而集群则是将多个服务器联合起来共同工作,以提高系统的可靠性、扩展性和性能。在集中式部署中,所有计算资源和数据都集中在一台或多台服务器上,通常是一台主机带多个......
  • 【Linux】useradd和adduser的区别
    先说结论:useradd是Linux本身自带的命令,属于原始级命令,有很多的参数可以设置,但对初学者使用不太友好。         adduser是一个Perl脚本,【推荐使用】在Linux系统中,创建用户是一个常见的操作,而useradd和adduser是两个常用的命令。虽然这两个命令的主要功能相似,但......
  • 问:JVM中有哪些垃圾器特点和区别是什么?
    JVM(Java虚拟机)的垃圾收集器有多种,每种收集器都有其特定的工作原理、适用场景和性能特点。以下是一些常见的JVM垃圾收集器及差异说明。常见垃圾收集器Serial收集器特点:Serial收集器是最古老、最稳定的收集器之一,使用单线程进行垃圾收集工作,进行垃圾收集时会暂停所有用户......
  • 问:JVM的垃圾收集算法你知道哪些,有什么区别?
    GC(垃圾回收器)的概念GC,即垃圾回收(GarbageCollection),是计算机程序中一种自动管理内存的机制。其目的是自动回收不再被使用的对象所占用的内存空间,从而避免内存泄漏和内存溢出,确保程序能够稳定、高效地运行。GC算法的主要特点GC算法有多种,每种算法都有其独特的工作原理和适......
  • C++中传指针和传引用的区别,各自的使用场景是什么
    在C++中,传指针和传引用都是将变量传递给函数的两种方式,但它们在语法、行为和使用场景上有一些区别。理解它们的区别和各自的适用场景是编写高效和安全代码的重要组成部分。1.传指针(PassbyPointer)指针是一种变量,它存储另一个变量的内存地址。在函数参数中使用指针,意味着将实......
  • python与C++的一些区别以及一些新的东西
    目录第一个Python程序输入与输出Python基础数据类型和变量字符串和编码使用list和tuple条件判断模式匹配循环使用dict和set第一个Python程序输入与输出Python基础数据类型和变量字符串和编码第一行代码的输出如下解释如下:'%2d-%02d'是格式化字......
  • height:100%,height:100vh什么区别呢
    height:100%; 和 height:100vh; 是设置元素高度的两种不同方式height:100%;:这个属性会使元素的高度等于其父元素的高度。也就是说,元素的高度将会占据其父元素的百分之百高度。值为百分比时,实际的高度取决于其父元素的高度。如果父元素没有显式地设置高度,则 height:......
  • evade、avoid和escape的区别
    evade、avoid和escape都表示“避开某种负面影响或者事物”。evade暗示避开的方法是机智的,技术是熟练的,手段是无所顾忌的。例如:evadedthequestionbychangingthesubject(通过转移话题避开了这个问题)avoid是“避免”,即事先想办法让负面影响完全不发生。或者不发生在自己身上。......