题意:

给出一棵\(n(1 \leq n \leq 200000)\)个节点的树,每个节点有一个权值。

然后有\(2\)种操作:

  • \(1 \, a \, b \, c\):将路径\(a \to b\)上的所有点的权值都变为\(c\)
  • \(2 \, a \, b \, c\):查询路径\(a \to b\)的权值和最大的非空连续子序列

分析:

首先要树链剖分,将问题转为线性的问题:

给出一个序列,查询给定区间\([L,R]\)的最大非空连续子序列。

线段树最重要的一点就是可以由左右子区间的合并得到父亲节点的区间信息。

这里维护区间的四个信息:

  • \(sum\):就是区间的所有元素和
  • \(pre\):区间的最大前缀和
  • \(suf\):区间的最大后缀和
  • \(sub\):区间的最大子区间和,也正是题目所求的

区间合并可以这样合并:

  • \(sum_f=sum_l+sum_r\)
  • \(pre_f=max \{ pre_l, sum_l + pre_r \}\),最大前缀可能在左子区间,可能跨过区间中点
  • \(suf_f=max \{ suf_r, suf_l+sum_r \}\),最大后缀可能在右子区间,可能跨过区间中点
  • \(sub_f=max \{ sub_l, sub_r, suf_l+pre_r \}\),最大子区间可能在左子区间,可能在右子区间,也可能跨过区间中点,就是左子区间的最大后缀与右子区间的最大前缀拼接起来

然后再将问题转移到树上,就是简单的一段一段的区间合并就行了。

注意区间合并的方向,查询的时候是将两个顶点向着\(LCA\)往上跳,注意最后合并的时候将区间翻转一下。

最后如果默认将节点\(1\)作为根节点开始\(DFS\)的话会爆栈,所以我们将\(\left \lceil \frac{n}{2} \right \rceil\)作为根就可以了。

这么鸡贼的做法,我猜肯定是出过题的人想出来的

Aizu 2450 Do use segment tree 树链剖分的更多相关文章

  1. Aizu 2450 Do use segment tree 树链剖分+线段树

    Do use segment tree Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.bnuoj.com/v3/problem_show ...

  2. Hdu 5274 Dylans loves tree (树链剖分模板)

    Hdu 5274 Dylans loves tree (树链剖分模板) 题目传送门 #include <queue> #include <cmath> #include < ...

  3. POJ3237 Tree 树链剖分 边权

    POJ3237 Tree 树链剖分 边权 传送门:http://poj.org/problem?id=3237 题意: n个点的,n-1条边 修改单边边权 将a->b的边权取反 查询a-> ...

  4. HDU 5614 Baby Ming and Matrix tree 树链剖分

    题意: 给出一棵树,每个顶点上有个\(2 \times 2\)的矩阵,矩阵有两种操作: 顺时针旋转90°,花费是2 将一种矩阵替换为另一种矩阵,花费是10 树上有一种操作,将一条路经上的所有矩阵都变为 ...

  5. Query on a tree——树链剖分整理

    树链剖分整理 树链剖分就是把树拆成一系列链,然后用数据结构对链进行维护. 通常的剖分方法是轻重链剖分,所谓轻重链就是对于节点u的所有子结点v,size[v]最大的v与u的边是重边,其它边是轻边,其中s ...

  6. 【BZOJ-4353】Play with tree 树链剖分

    4353: Play with tree Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 31  Solved: 19[Submit][Status][ ...

  7. SPOJ Query on a tree 树链剖分 水题

    You are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, ...

  8. poj 3237 Tree 树链剖分

    题目链接:http://poj.org/problem?id=3237 You are given a tree with N nodes. The tree’s nodes are numbered ...

  9. Codeforces Round #200 (Div. 1) D Water Tree 树链剖分 or dfs序

    Water Tree 给出一棵树,有三种操作: 1 x:把以x为子树的节点全部置为1 2 x:把x以及他的所有祖先全部置为0 3 x:询问节点x的值 分析: 昨晚看完题,马上想到直接树链剖分,在记录时 ...

随机推荐

  1. B. Game of the Rows

    B. Game of the Rows time limit per test 1 second memory limit per test 256 megabytes input standard ...

  2. Jquery使用ajax参数详解

    记录一下  Jquery使用ajax(post.get及参数详解) 1.get: $.ajax({ type: "GET", url: baseUrl + "Showco ...

  3. (译)Cg Programming/Unity(Cg编程/Unity)

    最近在学习Unity3d中的shader编程,能找到的中文资料比较少,于是,尝试翻译一下wiki Books上的资料,以方便其他跟我一样的入门学习者.由于是第一次翻译技术资料,经验不足,难免出错,请路 ...

  4. Java Lambda表达式教程与示例

    Lambda表达式是Java 8中引入的一个新特性.一个lambda表达式是一个匿名函数,而且这个函数没有名称且不属于任何类.lambda表达式的概念最初是在LISP编程语言中引入的. Java La ...

  5. Each soul is individual and has its own merits and faults.

    Each soul is individual and has its own merits and faults. 每一个灵魂都是独特的,都有各自的美德和过错.<摆渡人>

  6. Android笔记--BroadcastReceiver

    BroadcastReceiver(一)--用法总结 一. BroadcastReceiver简介 BroadcastReceiver是Android四大组件之一,他的作用是监听并且接受系统或者其他A ...

  7. Jenkins系列——使用Dashboard View分类展示作业

    1.目标 创建的作业多了,在一个视图中展示多有不便.因此需要使用 Dashboard View 将作业按照后缀进行分类展示. 如下图,可以按照后缀添加CODE,TEST和OTHER视图. 2.环境说明 ...

  8. 解决首次在eclipse中使用maven构建hadoop等项目时报Missing artifact sun.jdk:tools:jar:1.5.0的问题

    问题原因: eclipse中的maven插件默认没有引用环境变量,所以找不到jdk的路径,也就找不到tool.jar. 解决办法: 步骤如下: 1.关闭eclips 2.在eclipse的解压目录中与 ...

  9. 修复使用<code>XmlDocument</code>加载含有DOCTYPE的Xml时,加载后增加“[]”字符的错误

    C# LINQ TO XML - Remove “[]” characters from the DTD header http://stackoverflow.com/questions/12358 ...

  10. 数据库-SQL语法:把一个字段的值设为随机整数

     update test2 set zuig = (cast ( ceiling (rand()*9) as int))