• Bzoj 1036 树的统计 分类: ACM TYPE 2014-12-29 18:55 72人阅读 评论(0) 收藏


    Description

    一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身

    Input

    输入的第一行为一个整数n,表示节点的个数。接下来n – 1行,每行2个整数a和b,表示节点a和节点b之间有一条边相连。接下来n行,每行一个整数,第i行的整数wi表示节点i的权值。接下来1行,为一个整数q,表示操作的总数。接下来q行,每行一个操作,以“CHANGE u t”或者“QMAX u v”或者“QSUM u v”的形式给出。 对于100%的数据,保证1<=n<=30000,0<=q<=200000;中途操作中保证每个节点的权值w在-30000到30000之间。

    Output

    对于每个“QMAX”或者“QSUM”的操作,每行输出一个整数表示要求输出的结果。

    Sample Input

    4
    1 2
    2 3
    4 1
    4 2 1 3
    12
    QMAX 3 4
    QMAX 3 3
    QMAX 3 2
    QMAX 2 3
    QSUM 3 4
    QSUM 2 1
    CHANGE 1 5
    QMAX 3 4
    CHANGE 3 6
    QMAX 3 4
    QMAX 2 4
    QSUM 3 4

    Sample Output

    4
    1
    2
    2
    10
    6
    5
    6
    5
    16

    题解

    2014.4.6 树链剖分。。。

    参照了蒋一瑶神犇模板

    http://wenku.baidu.com/link?url=SGLjpJtYbJ0HxDYlU_GMXE1qCFS0gbmpDGWPxI7mQuNAsJP0y872mNKwpZ8P054g5XMhFGZbMUjZvN5hcnxFFUEfGBj6-tnkpnJvnVSlqGS

    树链剖分就是把树拆成一系列链,然后用数据结构对链进行维护。

    通常的剖分方法是轻重链剖分,所谓轻重链就是对于节点u的所有子结点v,size[v]最大的v与u的边是重边,其它边是轻边,其中size[v]是以v为根的子树的节点个数,全部由重边组成的路径是重路径,根据论文上的证明,任意一点到根的路径上存在不超过logn条轻边和logn条重路径。

    这样我们考虑用数据结构来维护重路径上的查询,轻边直接查询。

    通常用来维护的数据结构是线段树,splay较少见。

    具体步骤

    预处理

    第一遍dfs求出树每个结点的深度deep[x],其为根的子树大小size[x]

    以及祖先的信息fa[x][i]表示x往上距离为2^i的祖先

    第二遍dfs

    ž根节点为起点,向下拓展构建重链

    选择最大的一个子树的根继承当前重链

    其余节点,都以该节点为起点向下重新拉一条重链

    ž给每个结点分配一个位置编号,每条重链就相当于一段区间,用数据结构去维护。

    把所有的重链首尾相接,放到同一个数据结构上,然后维护这一个整体即可

    修改操作

    ž1、单独修改一个点的权值

    根据其编号直接在数据结构中修改就行了。

    2、修改点u和点v的路径上的权值

    (1)若u和v在同一条重链上

    直接用数据结构修改pos[u]至pos[v]间的值。

    (2)若u和v不在同一条重链上

    一边进行修改,一边将u和v往同一条重链上靠,然后就变成了情况(1)。

    查询操作

    ž查询操作的分析过程同修改操作

    题目不同,选用不同的数据结构来维护值,通常有线段树和splay

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    UITextField小结
    由iPhone项目生成iPad项目
    ios界面动画小结
    UIImagePickerController Class
    Xcode调试相关小结
    cocos2d简易引导
    python 多个装饰器组合应用,实现面向切面之AOP编程
    python 元类型编程, 单例模式SingleTon的一种实现方式
    python 实现简单的PerformanceCountCallHandler装饰器
    wxpython 之 GDI(二)
  • 原文地址:https://www.cnblogs.com/you-well-day-fine/p/4671607.html
Copyright © 2020-2023  润新知