题目:戳这里

题意:给定有n个点的一棵树,顶点1为根。m次操作,每次都把以v为根,深度dep以内的子树中所有的顶点(包括v本身)加x。求出最后每个点的值为多少。

解题思路:考虑到每次都只对点及其子树操作,要用dfs。设v当前要操作的点,操作的深度是dep,d[v]表示v的深度。要把深度[d[v],d[v]+dep]中所有点都加上x,暴力加是肯定不行的,于是想到要用树状数组或线段树。dfs+树状数组便是本题的基本思路。我们在搜索树的同时,维护以深度为下标的树状数组。为什么一个树形结构能够维护树状数组这样的线性结构呢?因为是对树的dfs,只要没有跳出点就一定搜一条线到底,这样搜索出来的点就能满足树状数组的线性。而每当跳出一个点,就把这个点给树状数组加的值减掉(回溯)即可。

附本人代码:

 1 #include <cstdio>
2 #include <cstring>
3 #include <queue>
4 #include <vector>
5 #define lowbit(x) x&-x
6 typedef long long ll;
7 const int maxn = 3e5+10;
8 const ll inf = 1e18;
9 using namespace std;
10 ll c[maxn];
11 vector<int> eg[maxn],dep[maxn];
12 vector<ll> op[maxn];
13 ll ans[maxn];
14 int n, m;
15 void add(int x, ll u) {
16 while(x <= n) {
17 c[x] += u;
18 x += lowbit(x);
19 }
20 }
21 ll sum(int x) {
22 ll res = 0;
23 while(x > 0) {
24 res += c[x];
25 x -= lowbit(x);
26 }
27 return res;
28 }
29 void dfs(int now, int pre, int d) {
30 for(int i = 0; i < op[now].size(); ++i) {
31 add(min(d + dep[now][i], n), op[now][i]);
32 }
33 ans[now] = sum(n) - sum(d-1);
34 for(auto i: eg[now]) {
35 if(i == pre) continue;
36 dfs(i, now, d+1);
37 }
38 for(int i = 0; i < op[now].size(); ++i) {
39 add(min(d + dep[now][i], n), -op[now][i]);
40 }
41 }
42 int main(){
43
44 scanf("%d", &n);
45 int x, y;
46 for(int i = 1; i < n; ++i) {
47 scanf("%d %d", &x, &y);
48 eg[x].push_back(y);
49 eg[y].push_back(x);
50 }
51 scanf("%d", &m);
52 int v, d;
53 ll xi;
54 for(int i = 1; i <= m; ++i) {
55 scanf("%d %d %lld", &v, &d, &xi);
56 if(d > n) d = n;
57 dep[v].push_back(d);
58 op[v].push_back(xi);
59 }
60 dfs(1,0,1);
61 for(int i = 1; i <= n; ++i)
62 printf("%lld ", ans[i]);
63 return 0;
64 }

codeforces 1076E Vasya and a Tree 【dfs+树状数组】的更多相关文章

  1. Codeforces 1076E Vasya and a Tree(树状数组)或dfs

    题意:给你一颗以1为根节点的树,初始所有节点的权值为0,然后有m个操作,每个操作将点x的所有距离不超过d的节点权值+1,问经过m次操作后每个节点权值是多少? 思路:如果是一个序列,就可以直接用树状数组 ...

  2. CF Edu54 E. Vasya and a Tree DFS+树状数组

    Vasya and a Tree 题意: 给定一棵树,对树有3e5的操作,每次操作为,把树上某个节点的不超过d的子节点都加上值x; 思路: 多开一个vector记录每个点上的操作.dfs这颗树,同时以 ...

  3. POJ 3321 Apple Tree (DFS + 树状数组)

    题意: 一棵苹果树有N个分叉,编号1---N(根的编号为1),每个分叉只能有一颗苹果或者没有苹果. 现在有两种操作: 1.某个分叉上的苹果从有变无或者从无边有. 2.需要统计以某个分叉为根节点时,它的 ...

  4. Weak Pair (dfs+树状数组)

    Weak Pair (dfs+树状数组) 题意 这个题目是要求:一颗树上,有n个节点,给出每个节点的权值.另外给出一个值k,问有多少对节点满足: \(power[u]*power[v]<=k\) ...

  5. codeforces 570 D. Tree Requests 树状数组+dfs搜索序

    链接:http://codeforces.com/problemset/problem/570/D D. Tree Requests time limit per test 2 seconds mem ...

  6. CF E. Vasya and a Tree】 dfs+树状数组(给你一棵n个节点的树,每个点有一个权值,初始全为0,m次操作,每次三个数(v, d, x)表示只考虑以v为根的子树,将所有与v点距离小于等于d的点权值全部加上x,求所有操作完毕后,所有节点的值)

    题意: 给你一棵n个节点的树,每个点有一个权值,初始全为0,m次操作,每次三个数(v, d, x)表示只考虑以v为根的子树,将所有与v点距离小于等于d的点权值全部加上x,求所有操作完毕后,所有节点的值 ...

  7. HDU5293(SummerTrainingDay13-B Tree DP + 树状数组 + dfs序)

    Tree chain problem Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  8. POJ3321Apple Tree【dfs 树状数组】

    题目大意:一棵树(不一定是二叉树!!),树的节点上本来都有一个苹果,要求完成以下操作: 1.指定某个节点,如果这个节点原本有苹果则拿去,如果没有苹果则填上一个苹果 2.询问某个节点以及其子树一共有多少 ...

  9. 2016 大连网赛---Weak Pair(dfs+树状数组)

    题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5877 Problem Description You are given a rooted ...

随机推荐

  1. 查看pod日志无法查看的解决方式

    查看pod日志 [root@k8s-master1 ~]# kubectl logs nginx-7cdbd8cdc9-2qrcw Error from server (Forbidden): For ...

  2. service代理模式及负载均衡

    [root@k8s-master ~]# vim service.yaml apiVersion: v1 kind: Service metadata: name: my-service spec: ...

  3. 理解C#中的 async await

    前言 一个老掉牙的话题,园子里的相关优秀文章已经有很多了,我写这篇文章完全是想以自己的思维方式来谈一谈自己的理解.(PS:文中涉及到了大量反编译源码,需要静下心来细细品味) 从简单开始 为了更容易理解 ...

  4. Zju1100 Mondriaan

    题目描述 有一个m行n列的矩阵,用1*2的骨牌(可横放或竖放)完全覆盖,骨牌不能重叠,有多少种不同的覆盖的方法? 你只需要求出覆盖方法总数mod p的值即可. 输入格式 三个整数数n,m,p,m< ...

  5. Py-re正则模块,log模块,config模块,哈希加密

    9.re正则表达式模块,用于字符串的模糊匹配 元字符: 第一:点为通配符 用.表示匹配除了换行符以外的所有字符 import re res=re.findall('a..x','adsxwassxdd ...

  6. 解决Linux下mysql区分大小写的问题

    1.查看lower_case_table_names的值,0代表区分大小写,1代表不区分大小写. 通过命令:SHOW VARIABLES LIKE 'lower%'; 1. 解决方法 以root用户登 ...

  7. 对于Spring MVC 拦截器的一些了解

    Spring MVC 拦截器的执行顺序 应用场景 假设请求 localhost:8080/ 则要求直接重定向到 localhost:8080/login ; 定义拦截器顺序 permission lo ...

  8. (004)每日SQL学习:物化视图之二

    一.    物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可 ...

  9. LOJ10159旅游规划

    题目描述 W 市的交通规划出现了重大问题,市政府下定决心在全市各大交通路口安排疏导员来疏导密集的车流.但由于人员不足,W 市市长决定只在最需要安排人员的路口安排人员. 具体来说,W 市的交通网络十分简 ...

  10. Elasticsearch如何保证数据不丢失?

    目录 如何保证数据写入过程中不丢 直接落盘的 translog 为什么不怕降低写入吞吐量? 如何保证已写数据在集群中不丢 in-memory buffer 总结 LSM Tree的详细介绍 参考资料 ...