BZOJ-1036-树的统计Count

描述

一棵树上有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本身.


分析

学了树链剖分就能做的题目.


  • 一个查询和操作和一个查询最大值操作, 中间的步骤不一样. 可以写两个函数, 返回值初始化的时候不一样, QSUM的时候初始化为0, QMAX的时候初始化的时候初始化为 -INF.

  • 想不通过树链剖分直接调用线段树 (比如本题的修改操作, 因为是单点修改), 修改的不是x而是tid[x]也就是x的新编号. 因为线段树里的编号是重新编的.

代码

https://code.csdn.net/snippets/607983

INF 可以设为 0x3f3f3f3f, 这样 memset(0x3f) 后数组初始值都等于 0x3f3f3f3f. 比较好的性质. ——Archon

一堆宏, 写熟了很好用. ——Archon

posted @ 2015-02-26 14:19  wfwbz  阅读(104)  评论(0编辑  收藏  举报