首页 > 其他分享 >树上求一个点邻域信息的一种简单求法

树上求一个点邻域信息的一种简单求法

时间:2024-05-05 20:44:25浏览次数:31  
标签:一个点 dep tree 复杂度 dsu 邻域 求法 lca

有人说,直接点分树,力大砖飞,非常不错!

实际上这种做法非常的垃圾,很多时候我们使用点分树,一定是不得不使用点分树,比如模板题,强制在线,非常的恶心,所以我们使用点分树。

而点分树是否必要呢?既然你能看到这篇blog,他肯定是不必要的!我们今天来发掘dsu on tree的美妙性质,让他求解这个问题!

然后就是我们考虑dsu on tree如果传统从子树向上合并,非常劣,因为这样的结构既我不会可持久化,而且不能够处理子树外信息,非常垃圾。

所以我们考虑自顶向下拆分轻儿子,这个结构非常有趣,首先时间复杂度证明沿用dsu on tree的时间复杂度证明,同时支持可持久化,这个我们先放到一边,最主要的是,他可以维护邻域了。

邻域一直是一个很神秘的东西,看着就跟dsu on tree无缘,但是我们通过这样的方式,他的结构就变得能够维护邻域了,非常的让人开心。

但是如何维护呢?如果每个点都分裂肯定会爆炸,怎么办呢?

考虑我们优先走重链,那么轻儿子因为是挂上去的,所以可以直接合并,我们有距离公式 \(dis(a,b)=dep_a+dep_b-2dep_{lca(a,b)}\),因为这个轻儿子是挂到重链上的,所以 lca 我是确定的,换句话说,我们可以把 \(dep_a-2dep_{lca(a,b)}\) 存到一个数据结构或者干脆就是一个桶里面去,然后用 \(dep_b\) 来查,这部分因为用的是同一个坐标所以合并到同一个数据结构里面去。

然后走轻边的时候,把当前子树信息从主子树信息中删除,然后开一个新的数据结构,旧的保存就好,顺便储存一下旧的版本的 lca(因为不能直接储存dep-2lcadep,直接储存的话时间复杂度是错的),每次需要查询邻域的时候调出来查询就好了,因为到根链轻边只有log条,所以时间复杂度是对的,到这里我们成功 \(\log^2\) 解决了这个问题。

首先大家知道dsu on tree 没办法在线,实际上真的没有办法吗?传统做法我不会,但是这个做法非常容易的我们就能够做到可持久化,一下子就支持在线了,非常的叫人喜欢!!!

相较于点分树,这个算法常数非常小,而且大多数时候跑不满,根据个人需要可以选择线段树或者树状数组维护。

而且最重要的,这个巨好写好调,模板我整理一下就发出来。

标签:一个点,dep,tree,复杂度,dsu,邻域,求法,lca
From: https://www.cnblogs.com/kisara-no-inu/p/18173842

相关文章

  • 【进阶五】Python实现SDVRP(需求拆分)常见求解算法——自适应大邻域算法(ALNS)
    基于python语言,采用经典自适应大邻域算法(ALNS)对需求拆分车辆路径规划问题(SDVRP)进行求解。目录往期优质资源1.适用场景2.代码调整3.求解结果4.代码片段参考往期优质资源经过一年多的创作,目前已经成熟的代码列举如下,如有需求可私信联系,表明需要的问题与算法......
  • 从CF1676H2看逆序对的两种求法
    Problem-1676H2-Codeforces思路原问题可以以直接转化成求\(a_i>=a_j(i<j)\)的数量。归并排序原理很直接,归并排序就是为了减少逆序对的数量,所以直接在操作的时候记录减少的数量即可排序后的数组无逆序对,归并排序的合并操作中,每次后段首元素被作为当前最小值取出时......
  • 对最大公约数求法和扩展欧几里得算法的简要概述
    目录1.最大公约数(gcd)1.1更相减损术时间复杂度分析1.2辗转相除法(欧几里得算法)时间复杂度分析2.最小公倍数(lcm)3.裴蜀定理(贝祖定理)3.1扩展欧几里得算法(exgcd)1.最大公约数(gcd)数论中,通常用\(d\|\a\)表示\(d\)能整除\(a\),即\(......
  • 判断一个点是否在一个范围中
    这个方法可以加入到工具类中去使用.注意:在使用此方法在判断经纬度时,一定要与使用地图一样的经纬度.附上:https://api.map.baidu.com/lbsapi/getpoint/index.html百度地图的拾取坐标系统/***返回一个点是否在一个多边形区域内*@parammPoints多边形坐标点列表......
  • 邻域均值
    邻域均值题目背景顿顿在学习了数字图像处理后,想要对手上的一副灰度图像进行降噪处理。不过该图像仅在较暗区域有很多噪点,如果贸然对全图进行降噪,会在抹去噪点的同时也模糊了原有图像。因此顿顿打算先使用邻域均值来判断一个像素是否处于较暗区域,然后仅对处于较暗区域的像素进行降......
  • 树的直径——树形dp求法
    树上任意两节点之间最长的简单路径即为树的「直径」。树形DP的做法可以在存在负权边的情况下求解出树的直径。constintN=10010,M=20010;intn,a,b,c,ans;structedge{intv,w;};vector<edge>e[N];intdfs(intx,intfa){intd1=0,d2=0;for(autoed:e[x]){......
  • awa(树上邻域数颜色)
    虚树+DP+树剖+二维数点题意:给一棵树,每个点有一个颜色,多次查询给定\(x,d\),询问树上距离某个点\(x\)小于等于\(d\)的所有点的颜色个数,这些点显然形成一个连通块。先将询问离线,考虑对于每个点,求出每个颜色对这个点的最小距离,考虑二维数点,来计算出\(\led\)的颜色的数......
  • 如何判断一个点在地图上?如何判断一个点在多边形内?
    highlight:a11y-dark近期,有接手到一个echarts地图图表项目,因为采集的散点数据很多打不到准确的地图点上,故有了这个问题。一般而言,标题的两个问题其是同一个问题,因为对与一个地图数据,也就是geoJson来说,其实就是一个有很多个点的多边形。目前来说判断点是否在一个多边形内,江......
  • math---多维随机变量函数的求法(截至目前已知的方法) 以及 卷积公式原理
    前言:感觉这里的知识有点小乱,遂浅浅整理一下零、卷积公式法原理https://www.bilibili.com/video/BV1mz4y1D7cW/?spm_id_from=333.788.top_right_bar_window_custom_collection.content.click&vd_source=87f7ad8544d4c3ad070c5c2ff28b7698卷积公式法的原理其实就是分布函数法+暴......
  • 如何判断一个点是否在多边形内
    1、概述判断一个点是否在多边形内有几种不同的思路,相应的方法有很多:射线法:从判断点向某个统一方向作射线,依交点个数的奇偶判断;转角法:按照多边形顶点逆时针顺序,根据顶点和判断点连线的方向正负(设定角度逆时针为正)求和判断;夹角和法:求判断点与所有边的夹角和,等于360度则在多边......