首页 > 其他分享 >虚树初步学习笔记

虚树初步学习笔记

时间:2024-06-23 22:44:31浏览次数:29  
标签:note text 笔记 初步 dfn nS 虚树 关键点

虚树

给定一棵树,树上有一些关键点,你要建另一棵树,保留关键点,以及任意一对关键点的 \(\text{LCA}\)。

当你发现对于一棵树,你只有一些关键点有用的时候,就可以尝试建虚树。

两次排序

思路

先把所有点按 \(\text{dfn}\) 序排序,然后把 \(\text{dfn}\) 相邻的两个点取出来,再把它们的 \(\text{LCA}\) 放进去。

再把所有点按 \(\text{dfn}\) 序排序,然后把 \(\text{dfn}\) 相邻的两个点取出来,设为 \(a_{i-1}\) 和 \(a_i\),那么再把它们的 \(\text{LCA}\) 放进去,同时 \(a_i\) 的父亲就是它们的 \(\text{LCA}\),连边即可。

核心代码

点击开 D
struct note {
	int p; note(int p_=0) { p=p_; return ; }
	friend bool operator < (const note a,const note b) {
		return dfn[a.p]==dfn[b.p]?a.p<b.p:dfn[a.p]<dfn[b.p];
	}
}; set<note> S={},nS={};
y=0,nS=S;
for(auto x:S) { if(y) {
	z=lca(x.p,y),nS.insert(note(z));
} y=x.p; } S=nS;
y=0; for(auto x:S) { if(y) {
	z=lca(x.p,y);
	if(z!=x.p) G[z].insert(mkp(x.p,deep[x.p]-deep[z]));
	nS.insert(note(z));
} y=x.p; } S=nS;

时间复杂度

假设有 \(k\) 个关键点,虚树一共 \(O(2k)\) 个点,时间复杂度是 \(O(k\log k)\)。

标签:note,text,笔记,初步,dfn,nS,虚树,关键点
From: https://www.cnblogs.com/fydj/p/18264041/vtree

相关文章

  • UaG论文阅读笔记
    User-as-Graph:UserModelingwithHeterogeneousGraphPoolingforNewsRecommendation论文阅读笔记Abstract现存的问题​ 现有的新闻推荐方法通常通过顺序模型或关注模型从用户行为中建立用户兴趣模型。然而,它们无法对用户行为之间的丰富关联性进行建模,而这种关联性可以为......
  • python学习笔记-09
    面向对象编程-中面向对象三大特征:封装、继承、多态。封装:把内容封装起来便于后面的使用。对于封装来讲,就是使用__init__方法将内容封装道对象中,然后通过对象直接或者self获取被封装的内容。继承:子继承父的属性和方法。多态:所谓多态就是定义时的类型和运行时的类型不一样......
  • 各种“熵”的理解——最新版《数学之美》第六章读书笔记
    目录1.信息熵1.1 数学表达1.2理解NLP中的信息熵概念2.消除不确定性2.1条件熵2.1.1数学表达2.1.2 理解NLP中的条件熵概念2.2互信息2.2.1数学表达2.2.2 理解NLP中的互信息概念3.相对熵3.1数学表达3.2理解NLP中的相对熵概念4.引用 1.信息熵1.1......
  • 2024/06/23笔记随笔
    创建文本输入框:````plaintextTextFieldtextField=newTextField();textField.setPromptText("请输入文字");//提示信息textField.setMaxWidth(100);*设置按钮的点击事件处理器:````plaintext//创建按钮的点击事件处理器Buttonbutton=newButton("Clickme");......
  • [模式识别复习笔记] 第9章 神经网络及BP算法
    1.基本概念1.1神经元神经网络是很多的神经元模型按照一定的层次结构连接起来所构成的。1.2激活函数\(\text{ReLU}\)函数:修正线性单元ReLU,是一种人工神经网络中常用的激活函数。\[\text{ReLU}(x)=\max(0,x)\]\(\text{sgn}\)阶跃函数:它将输入值映射为......
  • 【Unity&&C#】委托与事件笔记
    委托委托的定义委托是个类,分为Delegate自定义委托类型,Func有返回值的委托类型,Action无返回值的委托类型Func和Action的底层原理便是用Delegate声明一个委托类型(有返回值和无返回值),并且通过泛型参数(最多十六个)来实现自定义参数类型和参数委托的两种使用情况:模板方法(一般是......
  • 力扣刷题笔记
    记录5-6月力扣刷题,持续刷题中~2024.0515.三数之和双指针或者哈希表,注意去重的操作要考虑仔细classSolution{public:vector<vector<int>>threeSum(vector<int>&nums){vector<vector<int>>result;sort(nums.begin(),nums.end());......
  • unity麦扣x唐老狮3DRPG笔记分享,ProBuilder插件基本介绍(持续更新)
    声明:本文仅用于个人笔记及学习交流,禁止用作任何商业用途唐老师没有讲过这些插件,所以现在还没轮结合到唐老狮的课程的阶段在具体写代码以及介绍unity本体功能的时候唐老师的课程知识点会融入进来另外该插件功能过多,而用的较少所以很多功能就只做介绍,知道大概即可  首......
  • Hadoop+Hive超全笔记 一站式搞定!!
    Hadoophadoop集群的组成hadoop常用端口HDFS常用shell命令HDFS的原理、机制块和副本edits和fsimage文件HDFS的三大机制HDFS数据上传、写入原理(写流程)【重点】HDFS数据读取(读流程)【重点】原数据存储流程【重点】安全模式归档机制(小文件)垃圾桶机制MapReduce底层原......
  • Python进阶学习笔记-基础篇
    打印原始字符串print(r"D:\three\two\one\now")D:\three\two\one\now复现随机数importrandomx=random.getstate()print(random.randint(1,10))print(random.randint(1,10))print(random.randint(1,10))random.setstate(x)print(random.randint(1,10))pr......