首页 > 其他分享 >线段树优化建图

线段树优化建图

时间:2023-10-02 17:23:30浏览次数:38  
标签:连边 树结构 线段 建图 区间 优化 我们

一个很好用的 \(trick\)。

我们通过例题 CF786B 为例。

他需要我们支持点之间连边,点和区间之间连边,区间和点之间连边。

支持最短路。

如果我们暴力连边,显然最多是有 \(n^2\) 条边的。那怎么办呢,引入线段树分治。

线段树分治

在某些题中,我们可能会用 \(v \to u\in[l,r]\) 这种一个点指向区间,或者 \(u \in [l,r] \to v\) 这种东西。显然的,对于一个长度为 \(n\) 的序列,可能就会有 \(n^2\) 种边,直接存储肯定是不可以的。所以我们考虑用的东西优化建边。

如何优化建边?本质上的需求是用少量的点表示区间的边。就好比,我们读书的时候有一页页的页码,但是我们往往是通过章节来锁定内容;找章节的时候,我们有通过目录;找目录,我们通过找书...以此类推,我们可以发现,我们刚刚的例子,本质上就是用少量的点表示了区间的信息,也就是说,我们钦定点 \(v\) 表示一段区间,在钦定 \(u\) 表示一段点 \(v\)。这是什么?这显然就是树结构。

问题再次转化为,在树结构表示下,怎么用尽可能少的点表示出刚好是 \([l,r]\) 区间的所有点呢?显然是用类似线段树的方法,用 \(\log n\) 的区间表示,这样原本 \(n\) 的边数就优化为了 \(\log n\) 。对于点 \(u\) 连接区间 \([l,r]\) ,我们就相当于\(u\) 连接到了线段树上的区间,就像这个样子。

区间连点也是一样的。另外记得线段树上的点本身也要连边。不同的树也要连边,最后的效果就是这样

为什么要同时要用两棵树一个管出,一个入呢?我们用例题 CF786B 为例,你不可能说因为原来树上点到点距离为 \(0\),所以最短路为 \(0\) 吧。

标签:连边,树结构,线段,建图,区间,优化,我们
From: https://www.cnblogs.com/zhong114514/p/17740245.html

相关文章

  • Zabbix调优不完全指南(共12个优化案例)
    从学习搭建zabbix到完成各类监控、调优、二次开发已经过去了两年,期间通过QQ学习群、zabbix官方社区、各个技术博客整理学习了不少关于各种报错的处理方法,现在将常见的一些报错处理方法整理出来分享给大家。现在开始介绍常见报错处理方法:问题一、Zabbixserver内存溢出,无法启动......
  • java——mysql随笔——SQL优化&锁
               插入数据SQL优化:              主键优化:                                    order  by优化:       ......
  • 现代打包工具:优化前端开发流程与性能的利器
    ......
  • Unity性能优化-GPU Instancing
    GPUInstancing是Unity的一种优化技术。使用GPUInstancing可以在一个DrawCall中同时渲染多个相同或类似的物体,从而减少CPU和GPU的开销。官方文档:https://docs.unity3d.com/Manual/GPUInstancing.html要启用GPUInstancing,我们可以选中一个材质,然后在Inspector窗口勾选Enable......
  • Unity性能优化-动态合批
    动态合批也叫动态批处理,是Unity的一种优化技术。对移动的物体使用动态合批后,则Unity不会一个个绘制它们,而是把它们合并为一个批次(Batch),再由CPU把它们一次性提交给GPU进行处理,这样可以减少DrawCall带来的性能消耗,从而提高性能。官方文档:https://docs.unity3d.com/cn/current/Man......
  • [react性能优化]--防止react-re-render: Why Suspense and how ?
    近期内部项目基础项目依赖升级,之前使用的路由缓存不再适用,需要一个适配方案。而在此过程中reactre-render算是困扰了笔者很久。后来通过多方资料查找使用了freeze解决了此问题。本文主要论述reactre-render问题一般的解决方案和freeze在react内部的实现原理。react版本17.0.2......
  • 斜率优化学习笔记
    下面可能会用到一些叫上凸壳鸭下凸壳呀的名词,大家不用弄懂它的概念的说也不用望风而逃(我之前就望风而逃过(*/ω\*)),凸壳就简单理解成一个凸了一块的一段连线就好了。斜率优化有些地方不好用代数的语言刻画,比如下凸壳,比如凸包(凸包有的定义就直接写橡皮筋的比喻233333),以及为什么下凸......
  • Python笔记:控制流优化
    零值判断Python当中有个语法糖是可以直接对某个对象做空值判断:ifnums_arr: pass不同类型的数据对应什么样的bool值呢?我们可以有如下的判断:None、0、False、空列表、空元组、空字典、空集合等等都对应布尔值为假。其余的对应布尔值为真。但是现在问题来了,对于开发者自......
  • 线段裁剪:Cohen-Sutherland算法
    目录裁剪算法Cohen-Sutherland线段裁剪算法基本思想具体步骤计算分析程序代码裁剪算法计算机内部存储的图形数据量通常较大,而屏幕只显示其中一部分,因此需要确定哪些部分在显示区域内,哪些在显示区域外。这个过程称为裁剪(clipping)。裁剪是二维观察(三维观察)的重要部分,参见计算机图......
  • 【机器学习 | 数据预处理】 提升模型性能,优化特征表达:数据标准化和归一化的数值处理技
    ......