给一棵有根树,这棵树由编号为1..N的N个结点组成。根结点的编号为R。
每个结点都有一个权值,结点i的权值为vi 。
接下来有M组操作,操作分为两类:
1 a x,表示将结点a的权值增加x;
2 a,表示求结点a的子树上所有结点的权值之和。
输入格式
第一行有三个整数N,M和R。
第二行有N个整数,第i个整数表示vi 。
在接下来的N-1行中,每行两个整数,表示一条边。
在接下来的M行中,每行一组操作。
输出格式
对于每组2 a操作,输出一个整数,表示「以结点a为根的子树」上所有结点的权值之和。
样例
样例输入 1
10 14 9
12 -6 -4 -3 12 8 9 6 6 2
8 2
2 10
8 6
2 7
7 1
6 3
10 9
2 4
10 5
1 4 -1
2 2
1 7 -1
2 10
1 10 5
2 1
1 7 -5
2 5
1 1 8
2 7
1 8 8
2 2
1 5 5
2 6
样例输出 1

21
34
12
12
23
31
4
1<=N,M<=10^6,1<=R<=N
-10^6<=vi,x<=10^6

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 6;
typedef long long ll;
ll c[maxn], in[maxn], out[maxn], tot, d[maxn], head[maxn], cnt, n, m, r;
struct node {
int to, nxt;
} e[maxn << 1];
void addedge(int u, int v) {
e[++tot] = { v, head[u] };
head[u] = tot;
}
void dfs(int u) {
in[u] = ++cnt;
for (int i = head[u]; i; i = e[i].nxt) {
int v = e[i].to;
if (in[v])
continue;
dfs(v);
}
out[u] = cnt;
}
ll lowbit(int x)
{
return x & -x;
}
void add(int u, int x)
{
while (u <= n)
{
c[u] += x;
u += lowbit(u);
}
}
ll query(int u) {
ll ret = 0;
while (u > 0) {
ret += c[u];
u -= lowbit(u);
}
return ret;
}
int main() {
cin >> n >> m >> r;
for (int i = 1; i <= n; ++i) cin >> d[i];
for (int i = 1, a, b; i < n; ++i)
{
cin >> a >> b;
addedge(a, b), addedge(b, a);
}
dfs(r);
for (int i = 1; i <= n; ++i) //最始权值
add(in[i], d[i]);
for (int i = 1, op, a, x; i <= m; ++i)
{
cin >> op >> a;
if (op == 2)
{
cout << query(out[a]) - query(in[a] - 1) << endl;
}
else
{
cin >> x;
add(in[a], x);
}
}
}

  

DFS序1的更多相关文章

  1. BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discu ...

  2. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  3. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  4. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  5. 【BZOJ-1146】网络管理Network DFS序 + 带修主席树

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3495  Solved: 1032[Submi ...

  6. 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组

    E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

  7. 【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序

    3881: [Coci2015]Divljak Time Limit: 20 Sec  Memory Limit: 768 MBSubmit: 508  Solved: 158[Submit][Sta ...

  8. 2016 ACM/ICPC Asia Regional Dalian Online 1010 Weak Pair dfs序+分块

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  9. DFS序+线段树 hihoCoder 1381 Little Y's Tree(树的连通块的直径和)

    题目链接 #1381 : Little Y's Tree 时间限制:24000ms 单点时限:4000ms 内存限制:512MB 描述 小Y有一棵n个节点的树,每条边都有正的边权. 小J有q个询问,每 ...

  10. 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

随机推荐

  1. nginx 安装 thinkphp5 配置

    nginx.conf server { listen ; server_name s.huailaixx.com; charset utf-; location ~ \.php { root /dat ...

  2. 浅谈C++ allocator内存管理(对比new的局限性)(转)

    STL中,对内存管理的alloc的设计,迫使我去学习了allocator类.这里对allocator内存管理做了点笔记留给自己后续查阅.allocator类声明.定义于头文件<memory> ...

  3. bzoj4238 & loj2881 电压 二分图判定+dfs树

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4238 https://loj.ac/problem/2881 题解 如果想要让每一条边都有电流 ...

  4. SparkConf源码解读

    ------------恢复内容开始------------ 1.主要功能:SparkConf是Spark的配置类,配置spark的application的应用程序,使用(key,value)来进行存 ...

  5. Jupyter配置Spark开发环境

    兄弟连大数据培训和大家一起探究Jupyter配置 Spark 开发环境 简介 为Jupyter配置Spark开发环境,可以安装全家桶–Spark Kernel或Toree,也可按需安装相关组件. 考虑 ...

  6. Error:MySQLAdministrator无法连接到实例

    Q:利用MySQLAdministrator登录时显示could not connect to the specific instance,使用ping指令后可以ping通,如下所示: A:这里能够p ...

  7. 【bzoj3038】上帝造题的七分钟2

    *题目描述: XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. “第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平 ...

  8. CF 546 B Soldier and Badges(贪心)

    原题链接:http://codeforces.com/problemset/problem/546/B 原题描述: Soldier and Badges Colonel has n badges. H ...

  9. C++ 对象间通讯机制 框架实现

    // SignalSlot.h: interface for the CSignalSlot class. // /////////////////////////////////////////// ...

  10. plt.imshow()为什么不能显示同时显两张照片

    在编程的过程中发现plt.imshow()不能同时显示两张照片,如果有两条plt.imshow()语句处于一前一后的位置,那么程序运行后只会显示后面的图片.如果想让每一张图片都显示出来,需要在每一个p ...