博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[学习笔记]线段树优化建图
阅读量:5355 次
发布时间:2019-06-15

本文共 685 字,大约阅读时间需要 2 分钟。

一个点向一个点连边太easy了。

现实有的时候并没有这么简单。

 

对于这样的一类问题:

需要多次(m=1e5次左右)从一个编号在[L1,R1]的区间内的所有点,向另一个编号在[L2,R2]的所有点之间分别连权值相同的边。

求S到T的最短路,或者其他的信息。

就是一个建图的辅助工具。解题具体思想还是靠图论。

 

暴力连边是O(mn^2)的。时空不足。

对于区间连边,我们考虑处理区间问题的大杀器:线段树。

具体做法如下:

建造两棵线段树A,B

A保存入的信息,B保存出的信息。

到了A的某个节点,代表进入了这个点所代表的区间,位置可以认为是区间所有的包含点的叠加态。

到了B的某个节点,代表可以从这个点代表的区间中的任意一个边出去。

连边:

1.A树父亲向儿子连0边,能够进入父亲节点,必然就可以选择进入儿子节点。叠加态具体化。

2.B树儿子向父亲连0边,儿子属于父亲节点,父亲节点代表区间连出去边,儿子节点也一定可以走。

3.A树B树间的平行节点之间,由A向B连0边,代表,我进入A点,必然可以选择从A点出去。

4.对于题目要求加入的边(真边),建立虚拟节点P,在B中把出区间拆成logn份,分别连接到P点,边权为0

  在A中把入区间拆成logn份,点P分别连接到这些区间,边权都是val

  (当然,边权可以反过来)

然后跑最短路即可。

边数:O(2*2*n+m*logn*2)

点数:O(2*2*n+m)

 

模板题:

 

当然,也要解决一些其他抽象的问题:

 

 

以及炸弹:

 

转载于:https://www.cnblogs.com/Miracevin/p/9863080.html

你可能感兴趣的文章
解决响应式布局下兼容性的问题
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
Lucene 学习之二:数值类型的索引和范围查询分析
查看>>
软件开发工作模型
查看>>
Java基础之字符串匹配大全
查看>>
面向对象
查看>>
lintcode83- Single Number II- midium
查看>>
移动端 响应式、自适应、适配 实现方法分析(和其他基础知识拓展)
查看>>
selenium-窗口切换
查看>>
使用vue的v-model自定义 checkbox组件
查看>>
[工具] Sublime Text 使用指南
查看>>
Web服务器的原理
查看>>
常用的107条Javascript
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
HAL层三类函数及其作用
查看>>
web@h,c小总结
查看>>