线段树优化建图 笔记

博客观赏效果更佳
github
cnblogs

算法讲解

其实不用讲,看标题就知道这大概是一个什么样的算法了。

它用来解决这样类型的问题:你要支持,从一个点往一个区间中的所有点连一条边,或者一个区间中的所有点连一条边(有向)。

然后你就要进行一些 最短路/强连通分量/最大流 等图论基本操作了。

那么这个咋整呢(⊙.⊙)

假设我们现在是从第 ⑨ 个点向 [ 3 , 6 ] [3,6] [3,6] 区间中的所有点连边。可以如下图处理:
在这里插入图片描述

先建一颗线段树,这颗线段树上的每一个非叶子节点都向它的两个儿子连了一条有向边。

接着,我们把 [ 3 , 6 ] [3,6] [3,6] 在线段树上拆分一下,变成 [ 3 , 4 ] + [ 5 , 6 ] [3,4]+[5,6] [3,4]+[5,6]。然后我们从 9 9 9 连到线段树节点 [ 3 , 4 ] [3,4] [3,4],还有 [ 5 , 6 ] [5,6] [5,6],这样就可以 O ( log ⁡ n ) O(\log n) O(logn) 的时空复杂度实现一次区间连边了,是不是很神奇呢~~(✪ω✪)

(我当时是被这个算法骚到了,吓的我目瞪口呆)

那么这个父子之间的有向边,边权多少呢?首要原则是,不能影响答案,比如你要求最大流,那么影响答案的就是路径最小值,此时要把边权都设置为 I N F INF INF。如果是求最短路,那影响答案的就是路径和,此时把边权设置为 0 0 0 就好了 (**)

然后我们怎么从区间连向点呢?我们再建一颗树,这颗树的父子边是从儿子到父亲的有向边。然后再把区间拆分一下即可,和上面基本一样,就是反个方向☆daze~

还是那句话(韩信带净化),只有你们想不到,没有出题人出不到,咱们去挑战一把毒瘤例题咯 ~❤

起飞

T1. 超级经典のCF786B Legacy

(诶诶诶别吓我嗷,B 题就 *2600?

(对,没错,这就是 div.1 的神仙,自闭了 o(╥﹏╥)o

这题基本就是板子了(板子也毒瘤的要死),支持 m m m 个三种形式的连边操作:

  1. 有向边 u → w v u\xrightarrow[w]{\qquad} v u wv
  2. 区间连点 [ l , r ] → w
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值