当前位置: 首页 > news >正文

树链剖分相关

树链剖分这玩意儿还挺重要的,是解决静态树问题的一个很好的工具~

这里主要介绍一下做题时经常遇到的两个操作:

1.在线求LCA
int LCA(int x,int y){while(top[x]!=top[y])if(dep[top[x]]>dep[top[y]]) x=fa[top[x]];else y=fa[top[y]];return dep[x]<dep[y]?x:y;
}

这个非常重要!!!

在很多题目中,我们需要借助LCA 来解题

2.换根操作

换一个根就重新剖一次当然是不现实的

不妨就先以1号节点为根剖一下

树链修改值当然直接按照重链在线段树上改就好了

主要就是讨论以x为根的子树对于不同的根时的dfn序范围

那么设当前的根是root

①:x==root:范围当然就是全局

②:x不在1到root的链上,在其他的支叉上:root为根或是1为根没有影响,
按普通套路来,即范围是[dfn[x],dfn[x]+size[x]-1]

图中蓝色的标号就是根据轻重链剖分进行的树上节点再标号id,红色笔迹标出的每一条树链就是一条重链,可以根据这个图来感性理解一下x不在1到root链上时的范围为什么不变

③:x在1到root的链上:这就是要处理的重点了

上图中紫色圈出的节点即是当前root,绿色圈出的节点即是要查询的子树的根x,那么可以看出当前x在1到root的链上。思考现在x的子树,其实就是除去x往root方向的那个子树外,所有的节点

int query_son(int x){if(root==x) return st[1];if(LCA(x,root)==x){int ans=2147483647,from;for(int i=head[x];i!=-1;i=edge[i].nxt)if(LCA(edge[i].v,root)==edge[i].v){from=edge[i].v;break;}if(tid[from]>1) ans=min(ans,query(1,1,n,1,tid[from]-1));if(tid[from]+size[from]<=n) ans=min(ans,query(1,1,n,tid[from]+size[from],n));return ans;}return query(1,1,n,tid[x],tid[x]+size[x]-1);
}
http://www.lryc.cn/news/396608.html

相关文章:

  • 如何将Grammarly内嵌到word中(超简单!)
  • OTG -- 用于FPGA的ULPI接口芯片USB3320讲解(续)
  • 了解劳动准备差距:人力资源专业人员的战略
  • SAP PS学习笔记02 - 网络,活动,PS文本,PS文书(凭证),里程碑
  • Github 2024-07-07php开源项目日报 Top9
  • 算法训练(leetcode)第二十六天 | 452. 用最少数量的箭引爆气球、435. 无重叠区间、763. 划分字母区间
  • Ubuntu 下 Docker安装 2024
  • 发送者的可靠性
  • Profibus_DP转ModbusTCP网关模块连马保与上位机通讯
  • 移动应用:商城购物类,是最常见的,想出彩或许就差灵犀一指
  • linux 查看历史命令列表来访问之前的内容的命令是:history
  • NAS免费用,鲁大师 AiNAS正式发布,「专业版」年卡仅需264元
  • spring监听事件
  • 微软发布E2 TTS: 一种简单但效果优秀的文本转语音技术
  • python爬虫加入进度条
  • 力扣844.比较含退格的字符串
  • 用户特征和embedding层做Concatenation
  • Ubuntu20.04下修改samba用户密码
  • PHP老照片修复文字识别图像去雾一键抠图微信小程序源码
  • 识别色带详解解释
  • 如何用 Python 绕过 cloudflare(5秒盾) 抓取数据:也不是很难嘛!
  • 掌握Conda配置术:conda config命令的深度指南
  • MySQL:left join 后用 on 还是 where?
  • openfoam生成的非均匀固体Solid数据分析、VTK数据格式分析、以及paraview官方用户指导文档和使用方法
  • JVM:类的生命周期
  • 几种不同的方式禁止IP访问网站(PHP、Nginx、Apache设置方法)
  • 经典 SQL 数据库笔试题及答案整理
  • JS代码动态打印404页面源码
  • 从“钓”到“管”:EasyCVR一体化视频解决方案助力水域安全管理
  • springboot大学生竞赛管理系统-计算机毕业设计源码37276