首页 > 其他分享 >[DS 小计] 虚树

[DS 小计] 虚树

时间:2024-04-12 19:56:10浏览次数:24  
标签:text 小计 虚树 点集 dfn lca 排序 DS

概念

什么是虚树?
通俗的来说,虚树是原树的一些点集组成的树,这些点是一些关键点。

在树形 dp 遍历中,如果每次都遍历整棵树会很浪费时间,这时候虚树就派上用场了。

简介

虚树的节点有哪些?
在 dp 中,我们建立虚树包含着关键节点和关键节点的任意二者的 \(\text{lca}\) 。

到这里,你已经会 \(O(k^2)\) 枚举 lca 的方法构建虚树了。

构造

我们来证明几个性质。

结论 \(1\)

根据 dfn 排序后的序列,对于任意 \(x_1,x_2,x_3,x_4,...x_n\),其中 \(dfn_{x_1}<dfn_{x_2}..<dfn_{x_n} ,\)有 \(\text{lca}(x_1,x_n)=\text{lca}(\text{lca}(x_1,x_2),\text{lca}(x_2,x_3),...\text{lca}(x_{n-1},x_n),)\) 。

证明很简单,因为是按照 dfn 序列排序的,所以可以看成从左往右的点,对于 \(\text{lca}(1\to x-1)\),新的点 \(x\) 肯定是会要么在前 \(x-1\) 个点的子树内,这时候就是原 \(lca\) ,否则子树外的话,就是和字数内任取一个点的 lca 即可。

结论 \(2\)

\(\text{lca}(x_1,x_n)\in \{\text{lca}(\text{lca}(x_1,x_2),\text{lca}(x_2,x_3),...\text{lca}(x_{n-1},x_n))\}\) 。

这个结论显然,这一定是这些 \(lca\) 中深度最小的那个点。深度最小的那个 \(lca\) 肯定是所有点的 \(lca\) .

也可以这样理解。

image

看图,明显,是有一对跨过 \(lca\) 的点对的。所以,结论正确。

所以,我们证明了一个很重要的性质:对于一个点集 \(U\) ,若将 \(U\) 中任意两两 \(\text{lca}\) 加入点集 \(V\) ,\(|V|\) \(\le\) \(|U|-1\)

也就是说,我们能证明,虚树中的点都是经过 dfn 排序后任意两个节点的 \(\text{lca}\) 。

构造方法

  • 第一步,将所有点按照 dfn 排序
  • 第二步,将相邻点的 \(\text{lca}\) 加入点集。
  • 第三步,将所有点集内的点按 dfn 排序。
  • 第四步,连接相邻点对即可。

是不是很简单?时间复杂度因为排序很明显是 \(O(k\log k)\) 。
这样就做完了。

标签:text,小计,虚树,点集,dfn,lca,排序,DS
From: https://www.cnblogs.com/g1ove/p/18131994

相关文章

  • WDS故障排除 Script:X:\Deploy\Scripts\LiteTouch.wsf Code:80040049
    简介:不知道是因为微软换了咖喱程序员还是怎么了,居然有发布错误。还偷摸放GitHub的微软文档。memdocs/memdocs/configmgr/mdt/known-issues.mdatmain·MicrosoftDocs/memdocs(github.com)X:\Deploy\Scripts\LiteTouch.wsfScript:X:\Deploy\Scripts\LiteTouch.wsfCode......
  • 华企盾DSC的文件权限管理功能如何实现?
    华企盾DSC数据防泄密系统的文件权限管理功能通过一系列细致和灵活的控制手段实现,确保敏感数据只能被授权人员访问和处理。以下是实现这一功能的具体步骤:权限设置:管理员可以对内部员工或指定计算机进行文件权限的设定,包括查看、打印、截屏、编辑等操作。这些权限可以根据企业安......
  • php的addslashes()函数
    PHPaddslashes()函数addslashes()函数是PHP的一个内置函数,它返回一个在预定义的字符前会添加反斜杠的转义字符串。可以注:它不会在参数中使用任何指定的字符。预定义的字符是:●单引号(')●双引号(")●反斜杠(\)●空(null)值基本语法:addslashes($string)参数: ......
  • 52 Things: Number 25: Methods for modular reduction using "special" primes that
    52Things:Number25:Methodsformodularreductionusing"special"primesthatdefine GF(p) and GF(2n)52件事:第25件:使用定义 GF(p) 和#1的“特殊”素数进行模归约的方法# Thisisthelatestinaseriesofblogpoststoaddressthelistof '52ThingsEver......
  • 52 Things: Number 16: Describe the key generation, signature and verification al
    52Things:Number16:Describethekeygeneration,signatureandverificationalgorithmsforDSA,SchnorrandRSA-FDH.52件事:第16件:描述DSA、Schnorr和RSA-FDH的密钥生成、签名和验证算法。 Thisisthelatestinaseriesofblogpoststoaddressthelistof'......
  • 【论文随笔】基于会话的推荐系统构建方法调查(Survey On Methods For Building Sessio
    前言今天读的论文为一篇于2023年发表在国际开放信息技术杂志(InternationalJournalofOpenInformationTechnologies)的论文,文章是关于构建基于会话的推荐系统(Session-basedRecommenderSystems,SBRS)的方法的综述。文章首先介绍了推荐系统在处理大量信息领域(如在线商店、电......
  • MySQL binlog超过binlog_expire_logs_seconds阈值没有删除案例
    生产环境有一套3个节点的MySQLInnoDBCluster,MySQL的版本为Serverversion:8.0.35MySQLCommunityServer-GPL,早上突然收到Zabbix的告警,其中一个节点出现空间告警:"/data:Diskspaceislow(used>80%)"检查分析后发现是因为MySQL的binlog没有清理导致空间报警,如下所示(b......
  • 如何使用pgvector为RDS PostgreSQL构建专属ChatBot?
    背景越来越多的企业和个人希望能够利用LLM和生成式人工智能来构建专注于其特定领域的具备AI能力的产品。目前,大语言模型在处理通用问题方面表现较好,但由于训练语料和大模型的生成限制,对于专业知识和时效性方面存在一些局限。在信息时代,企业的知识库更新频率越来越高,而企业所......
  • AndroidStudio构建项目耗时太长优化办法
    新建AndroidStudio项目时,常会因为网络问题导致部分依赖下载缓慢,其中gradle和kotlin这两个模块最拖慢进度。解决方案:对gradle.properties和settings.gradle.kts这两个配置文件进行修改 对gradle.properties#Project-wideGradlesettings.#IDE(e.g.AndroidStudio)use......
  • 达梦单机恢复到2节点的DSC
    环境:OS:Centos7DB:DMV8单机实例名:HXLDSC实例名:SLNNGK 1.单机备份disqlSYSDBA/SYSDBASQL>backupdatabasefullbackupset'/dmdbms/backup/single_fullbak_20240411';SQL>backuparchivelogalldeleteinputto"singe_archbak_20240411"backupset&......