题意:

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

思路:

O(n)DFS一遍即可,既然只用最后输出答案,果断离线,存下每个点的所有操作

设deep[x]为x点的深度

  • 当第一次DFS到点v时,将深度在deep[v]到deep[v+d]的点权值全部加上x
  • 当搜完点v所有的子孙准备回溯时,将深度在deep[v]到deep[v+d]的点权值全部减去x
  • 这样每次搜到点v,当前深度的总权值就是答案

以上可以用BIT解决,当然也可以直接差分

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<string>
#include<math.h>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
#define LL long long
#define mod 1000000007
typedef struct Res
{LL val;int dep;
}Res;
Res s[300005];
vector<int> G[300505];
vector<Res> F[300505];
int n;
LL ans[300505], out[300505];
void Sech(int u, int p, int deep, LL val)
{Res now;int i, v;for(i=0;i<F[u].size();i++){now = F[u][i];out[deep] += now.val, out[min(deep+now.dep+1, n+5)] -= now.val;}val += out[deep];//printf("%d %d %lld %lld\n", u, deep, out[deep], val);ans[u] = val;for(i=0;i<G[u].size();i++){v = G[u][i];if(v==p)continue;Sech(v, u, deep+1, val);}for(i=0;i<F[u].size();i++){now = F[u][i];out[deep] -= now.val, out[min(deep+now.dep+1, n+5)] += now.val;}
}
int main(void)
{Res now;int m, i, x, y;scanf("%d", &n);for(i=1;i<=n-1;i++){scanf("%d%d", &x, &y);G[x].push_back(y);G[y].push_back(x);}scanf("%d", &m);for(i=1;i<=m;i++){scanf("%d%d%lld", &x, &y, &now.val);now.dep = y;F[x].push_back(now);}Sech(1, 0, 1, 0ll);for(i=1;i<=n;i++)printf("%lld ", ans[i]);puts("");return 0;
}

Educational Codeforces Round 54 (Rated for Div. 2): E. Vasya and a Tree(DFS+差分)相关推荐

  1. Educational Codeforces Round 54 (Rated for Div.2)

    Educational Codeforces Round 54 (Rated for Div.2) D. Edge Deletion 题意:一张n个点的无向图,保留其中k条边,使得有尽可能多的点与1的 ...

  2. Educational Codeforces Round 54 (Rated for Div. 2) D Edge Deletion (SPFA + bfs)

    题目大意:给定你一个包含n个点m条边的无向图,现在最多在图中保留k条边,问怎么删除多的边,使得图中良好的节点数最多,求出保留在图中的边的数量和编号. 良好的节点定义为:删除某条边后该点到点1的最短距离 ...

  3. Educational Codeforces Round 54 (Rated for Div. 2): D. Edge Deletion(最短路树)

    题意: 给你n个点m条边的无向图,其中1号节点是市中心,你现在最多只能保留k条边,并要求所有点到市中心的最短路尽量不变(也就是说设点i到点1的最短路为di,那么删边之后,要保证尽可能多的点,它到1的最 ...

  4. Codeforces Educational Codeforces Round 56 (Rated for Div. 2) 1093F. Vasya and Array

    有一个长度为nnn的的数列,aia_iai​的值域只有kkk个元素. 一个数列有一些数字已经填上.现在要求数列连续的数字长度不能超过lll,问所有不同的数列的个数有多少个. 1.考虑所有的数字都没填上 ...

  5. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  6. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  7. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  8. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  9. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

最新文章

  1. 配置web site 在IIS 6.0
  2. 深入理解分布式技术 - 两阶段的应用 MySQL XA 规范
  3. c++新特性11 (9)智能指针一”_Compressed_pair类“
  4. 回调地狱解决方案之Promise
  5. 学习编程技术常见的疑问,你敢说你没有过一个吗?信你个鬼!
  6. linux脚本 sed,Linux脚本利器sed
  7. 3-5比较和Fancy Indexing
  8. 【AI面试题】GBDT原理、如何用于分类、常用损失函数
  9. 逐句深扒 Apache 许可协议原文,一文看懂!
  10. 浅谈MySQL存储引擎选择 InnoDB还是MyISAM
  11. Vue实例-本地留言板
  12. Java-API:java.util.ArrayList
  13. L1-041__048
  14. 模电七:集成运算放大器(上)
  15. 独立站开发优化问题?
  16. sunShine问题
  17. java科学计算器代码_用JAVA编写的科学计算器源代码是什么?
  18. 计算机主机箱背后的接口,计算机主机背面有哪些接口
  19. 计算机网络的基础学习
  20. mobi文件怎么打开?

热门文章

  1. python入门经典100题-Python3基础训练经典100题(带答案)下载
  2. 微信终于良心一回,更新了语音识别功能可识别粤语,广东人有福了
  3. 玩人工智能的你必须知道的语音识别技术原理
  4. Vue-Cli3配置多页面应用(详)
  5. JavaScript-预解析(变量提升)
  6. css3 first letter,::first-letter
  7. mysql nb3 备份_Navicat mysql 数据库备份和使用,备份以后是nb3文件-Go语言中文社区...
  8. FFmpeg源代码简单分析:内存的分配和释放(av_malloc()、av_free()等)
  9. java 时间戳验证_关于Java:在时间戳服务器上使用时间戳和身份验证对jar进行签名...
  10. element 输入框点击事件_Element Input输入框的使用方法