关于虚树

news/2024/11/17 19:41:56/文章来源:https://www.cnblogs.com/Elaina-0/p/18350221

关于虚树

瞎扯

某些树上问题,给了巨多节点,而实际上它们之中只有小部分能做出贡献,其余都是些水军,为杀尽 OIers的脑细胞 做出努力

考虑重新种一棵树,浓缩信息,简化节点个数,于是产生了 虚树

大概是长这个样子:
红色结点是我们选择的关键点,即能够做出贡献的点。红色和黑色结点都是虚树中的点。黑色的边是虚树中的边。

因为任意两个关键点的 LCA 也是需要保存重要信息的,能够维持树的形态,所以我们需要保存它们的 LCA

显然,在保证爹不会变成儿子,儿子不会变成爹 爷爷也不行 的前提下,我们是可以随便把原有的点添到虚树中去的

你当然可以把原树所有的点都加到虚树中,只不过你这虚树建了跟建了一样

因此,为了方便,我们可以首先将 \(1\) 号节点加入虚树中,并且不会影响答案

构造

构造有两种方式,其中二次排序的方法常数较大,所以没写。才不会告诉你其实是因为我懒

本篇只介绍第二种,借助单调栈实现。

直接枚举所有关键点对,暴力求解 LCA 的时间复杂度显然不可接受。

我们可以将所有关键点先按 DFS 序排序,按顺序一个一个加到树里。刚开始树上只有 \(1\) 号点。

接下来,我们用一个栈维护在树上一条链上的所有点。这个栈内的所有点满足其 DFS 序单调递增。

每次要将下一个关键点(设为 \(u\))入栈前,求一下当前栈顶元素和这个关键点 \(u\) 的LCA \(p\),分讨:

  • 如果栈顶是 \(p\),则可以知道我们加入的关键点 \(u\) 和栈中的点在一条链上,直接将关键点加入栈中即可。如图

  • 如果此时栈顶不是 \(p\)(显然这时候 \(p\) 的 DFS 序比栈顶大,且 栈顶所在位置的子树业已处理完毕),说明 \(p\) 不在链上,将栈顶弹出,直到栈顶为 \(p\),此时插入关键点。
    弹栈的时候记得把他和他父亲的边连一下。

酱紫我们的虚树就种好了捏~

Code

没调出来,恼了,先发了再说...


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/780195.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGauss部署案例之---OpenEuler 20.03部署OpenGauss企业版

OpenGauss、OpenEuler案例说明: 在OpenEuler20.03系统,x86架构下部署OpenGauss 5.0.1企业版单实例数据库。 **数据库版本: ** openGauss=# select version();version -------------------------------------------------------------------------------------------------…

预训练语言模型公平性-公平性度量、去偏方法

一、内在偏见与外在偏见  1、内在偏见:训练前数据集中存在的刻板印象; 2、外在偏见:用来衡量偏差如何在下游任务中传播。通常包括微调,然后评估其关于性别和种族等敏感属性的表现; 3、许多NLP应用程序对现有的语言模型进行了微调,这些模型将外在偏见和内在偏见交织在一…

航天科技 “小快轻准”解决方案助力中小企业数字化转型

数字化转型喊了很多年,中小企业为何对降本增效无动于衷?“数字化转型,是中小企业的必答题。” 但是面临动辄十几万甚至几十万上百万的改造成本,投入真金白银,存在回报期长,不确定性大的问题,所以成本受限成为一大绊脚石。除了资金问题,缺人缺技术缺数据也是转型的难点…

IntelliJ IDEA 2024.2 发布:Spring Data JPA即时查询、自动补全cron表达式

今早看到,IntelliJ IDEA 2024.2 发布的邮件提示,看了一眼这个版本更新的新特性真的太适合我了!也许这些能力对关注DD的小伙伴也有帮助,所以搞篇博客介绍和推荐一下。下面就来一起看看这个版本中推出的几个强大新特性。 Spring Data JPA 的即时查询 在2024.2 Ultimate版本中…

CF379F New Year Tree

题意 给定图:每次在叶子结点加入两个点,并实时输出树的直径长度。 思路 每次增加两个点,直径至多变化一个点,长度最多加 1,所以对加入的点处理 lca,并且更新长度和点即可。 代码 #include <bits/stdc++.h>using namespace std;const int N = 1000010;int fa[30][N]…

【总结】注册码泄露原理以及例题

该题目采用了SIMD指令集,该指令格式在CTF和攻防对抗中经常出现,可以提高执行效率的同时也可以增加逆向的难度。对于此类指令和题目,我们分析的方法是:遇到查意思,查的多了就跟看正常代码一样,采用动态分析。引言 题目给了小明的机器码:1653643685031597 用户user_id:xi…

Docker Desktop 出现 Unable to calculate image disk size 错误提示的解决方法

Win11安装了Docker Destop,版本为4.25.2。Docker Desktop能随系统启动而启动,其内部管理的容器也可以正常启动,但是不和谐的地方也出现了: 在从通知区域双击Docker Desktop的图标后,它就会出现如下错误信息,虽不影响使用,但是相当碍眼:解决方案: 【1】进入设置,关闭“…

docker pull实现断点续传

本文介绍了使用Docker从DockerHub上下载容器镜像时很有可能出现的网络中断的问题。默认情况下,如果Docker下载镜像的过程中被中断了,是要从头开始下载的,而且再次下载也有可能受到网络波动的影响。这里提供了一种配置docker参数文件的方法,以及在该方案不生效的情况下的手动…

清除电脑c盘空间—Windows.edb

前言:一大早发现电脑好卡,然后看c盘居然红了,238G的总空间呢,按理现有软件不会占用这么多内存的。 1、火绒的垃圾清理走一波,没清掉多少 2、c盘右键=》属性=》常规下的 磁盘清理 ,也没清掉多少 3、c盘右键=》有个释放c盘空间,点开后发现是wps清理大师,不知道什么时候存…

简单理解H264编码

H264视频码流原理参考帖子:https://blog.csdn.net/go_str/article/details/80340564?spm=1001.2014.3001.5502 0、序言: 首先要弄明白编码的目的。当你此刻显示器正在播放一个视频,分辨率为1280*720,帧率为25,那么一秒所产生正常的数据大小为:1280*720(像素)*25(张)…

.NET 8 + Blazor 多租户、模块化、DDD框架、开箱即用

前言 基于 .NET 8 的开源项目,主要使用 WebAPI + Blazor 支持多租户和模块化设计,DDD构建。可以帮助我们轻松地搭建起一个功能完善的Web应用程序。除了帮助你快速构建应用程序之外,项目也可以当做学习资料。我们可以从中了解到多租户、CQRS、DDD架构、云部署、Docker容器化等…

日程表-获取当前周,点击切换上一周和下一周

获取本周的开始日期和结束日期(本周周一到周日):var currentTime = new Date() this.getThisWeekData(currentTime, 0)点击切换上周的周历(把当前周的周一的时间传进去就行,如“2024-08-05”): this.getThisWeekData(currentData.startData, -7)点击切换下周的周历(把当前…