题目链接:https://cn.vjudge.net/problem/CodeForces-1076E

题解:树状数组维护下深度,到达每个节点,对于每次更新容斥一下,对于直接查询即可

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define lowbit(x) (x & (-x))
const int N = 3e5 + 10;struct edge {int to, nex;
}e[N * 2];
int head[N], len;
int n, m;
ll dep[N], ans[N];
vector<pair<int, int> > v[N];
void Addedge(int x, int y) {e[len].to = y;e[len].nex = head[x];head[x] = len++;
}
void update(int pos, ll val) {while(pos < N) {dep[pos] += val;pos += lowbit(pos);}
}
ll query(int x) {ll res = 0;while(x) {res += dep[x];x -= lowbit(x);}return res;
}
void dfs(int u, int fa, int deep) {for(int i = 0; i < v[u].size(); i++) {update(deep, v[u][i].second);update(deep + v[u][i].first + 1, -v[u][i].second);}ans[u] = query(deep);int to;for(int i = head[u]; i != -1; i = e[i].nex) {to = e[i].to;if(to == fa) continue;dfs(to, u, deep + 1);}for(int i = 0; i < v[u].size(); i++) {update(deep, -v[u][i].second);update(deep + v[u][i].first + 1, v[u][i].second);}
}
int main() {memset(head, -1, sizeof(head));int x, y, z;scanf("%d", &n);for(int i = 1; i < n; i++) {scanf("%d %d", &x, &y);Addedge(x, y);Addedge(y, x);}scanf("%d", &m);for(int i = 1; i <= m; i++) {scanf("%d %d %d", &x, &y, &z);v[x].push_back(make_pair(y, z));}dfs(1, 0, 1);for(int i = 1; i <= n; i++)printf("%lld%c", ans[i], " \n"[i == n]);return 0;
}

CodeForces - 1076E Vasya and a Tree 树剖?nono dfs+树状数组相关推荐

  1. 暑假集训8.10-网络流套树剖套线段树

    题目:dtoj2797旅行商 其实就是裸的网络流套树剖套线段树其实代码不难码 emmmmmm我决定草率的直接上代码,这可能是一条无营养的博客.... #include<bits/stdc++.h ...

  2. 51nod1307(暴力树剖/二分dfs/并查集)

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1307 题意: 中文题诶~ 思路: 解法1:暴力树剖 用一个数 ...

  3. P3292 [SCOI2016]幸运数字(树剖 + 线段树维护线性基)

    P3292 [SCOI2016]幸运数字 思路 如果这题是求x,yx, yx,y之间的距离显然我们可以通过树剖加线段树来写, 但是这里变成了求任意个数的异或最大值.如果给定区间我们显然可以通过线性基来 ...

  4. BZOJ 4817: [Sdoi2017]树点涂色(LCT+树剖+线段树)

    题目描述 Bob有一棵 nn 个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. Bob ...

  5. 图论 ---- E. Pairs of Pairs(构造+无向图的dfs树的性质)

    题目链接 题目大意: 题目解法: 首先我们先对这个图求一个dfs树dfs树dfs树,那么对dfs树dfs树dfs树求树的直径rrr如果⌈n2⌉≤r\lceil\frac{n}{2}\rceil\leq ...

  6. XXI Open Cup. Grand Prix of Korea I. Query On A Tree 17 树剖 + 二分 + 树带权重心

    传送门 文章目录 题意: 思路: 题意: 给你一棵树,每棵树初始权值都为000,现在给你两个操作: (1)(1)(1)将uuu的子树权值全部加111. (2)(2)(2)将(u,v)(u,v)(u,v ...

  7. CodeForces - 609E Minimum spanning tree for each edge(最小生成树+树链剖分+线段树/树上倍增)

    题目链接:点击查看 题目大意:给出一张 n 个点和 m 条边组成的无向图,现在询问包含每一条边的最小生成树 题目分析:考虑求解次小生成树的思路: 求出最小生成树 ans 枚举每一条非树边 ( u , ...

  8. 2019ICPC西安邀请赛 E. Tree(树剖 + 线段树)

    Tree 给定一棵树,节点有点权,然后有三种操作: 一.修改1−>s1->s1−>s的路径上的点权与ttt进行按位或. 二.修改1−>s1->s1−>s的路径上的点 ...

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

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

最新文章

  1. ba+ii+plus模拟+android,财务计算器(BAII PLUS)
  2. Android使用Application总结
  3. 011 吃药call功能分析和代码编写
  4. CentOS赋予一个普通用户root权限
  5. 开源游戏《一小时人生》GitHub仓库被删,CEO亲自道歉
  6. asp.net mvc中加入log4net记录错误日志
  7. java byte to integer_Java中的Byte转为无符号的Integer
  8. OpenCV学习笔记——多种Smooth平滑处理
  9. Linux中mount挂载命令及其概念
  10. 【vn.py】源码解析之 Dual Thrust 策略
  11. 《信号与系统学习笔记》—线性反馈系统(二)
  12. Transformer模型详解
  13. 读“技术的执念”有感
  14. 【更新】京东、美团、饿了么获取cookies
  15. 控制成本,控制成本知识点,挣值和实际成本、EAC,ETC.TCPI解析表
  16. 计算机管理打印机服务,win7系统打印机服务怎样开启 开启打印机服务的设置方法...
  17. java file outside of source root - IDEA中的java文件突然出现这样的提示
  18. 重装系统后的QQ聊天记录恢复方法与教程
  19. P9-前端基础-CSS简介
  20. 用户故事与敏捷方法 - 第十章 迭代故事

热门文章

  1. 京东创始人刘强东:我的策略是成本约等于毛利
  2. 用10元,20元,50元三种币值的纸币凑出1000元,一共有多少种组合(C++实现)三种思路,两种实现
  3. 《AutoCAD全套园林图纸绘制自学手册》一第2章 AutoCAD 2013入门2.1 操作界面
  4. Python 协程详解
  5. CSS-transition-过渡特效
  6. 用selenium获取土地交易数据并用百度智慧云API图片转文字
  7. 什么是联合体【详解】
  8. Vue项目嵌入天地图专题一:加载天地图
  9. ZED2相机SDK安装使用及ROS下使用
  10. 第一章 Cucumber基础