CodeForces - 1076E Vasya and a Tree 树剖?nono dfs+树状数组
题目链接: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+树状数组相关推荐
- 暑假集训8.10-网络流套树剖套线段树
题目:dtoj2797旅行商 其实就是裸的网络流套树剖套线段树其实代码不难码 emmmmmm我决定草率的直接上代码,这可能是一条无营养的博客.... #include<bits/stdc++.h ...
- 51nod1307(暴力树剖/二分dfs/并查集)
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1307 题意: 中文题诶~ 思路: 解法1:暴力树剖 用一个数 ...
- P3292 [SCOI2016]幸运数字(树剖 + 线段树维护线性基)
P3292 [SCOI2016]幸运数字 思路 如果这题是求x,yx, yx,y之间的距离显然我们可以通过树剖加线段树来写, 但是这里变成了求任意个数的异或最大值.如果给定区间我们显然可以通过线性基来 ...
- BZOJ 4817: [Sdoi2017]树点涂色(LCT+树剖+线段树)
题目描述 Bob有一棵 nn 个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. Bob ...
- 图论 ---- E. Pairs of Pairs(构造+无向图的dfs树的性质)
题目链接 题目大意: 题目解法: 首先我们先对这个图求一个dfs树dfs树dfs树,那么对dfs树dfs树dfs树求树的直径rrr如果⌈n2⌉≤r\lceil\frac{n}{2}\rceil\leq ...
- 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 ...
- CodeForces - 609E Minimum spanning tree for each edge(最小生成树+树链剖分+线段树/树上倍增)
题目链接:点击查看 题目大意:给出一张 n 个点和 m 条边组成的无向图,现在询问包含每一条边的最小生成树 题目分析:考虑求解次小生成树的思路: 求出最小生成树 ans 枚举每一条非树边 ( u , ...
- 2019ICPC西安邀请赛 E. Tree(树剖 + 线段树)
Tree 给定一棵树,节点有点权,然后有三种操作: 一.修改1−>s1->s1−>s的路径上的点权与ttt进行按位或. 二.修改1−>s1->s1−>s的路径上的点 ...
- CF Edu54 E. Vasya and a Tree DFS+树状数组
Vasya and a Tree 题意: 给定一棵树,对树有3e5的操作,每次操作为,把树上某个节点的不超过d的子节点都加上值x; 思路: 多开一个vector记录每个点上的操作.dfs这颗树,同时以 ...
最新文章
- ba+ii+plus模拟+android,财务计算器(BAII PLUS)
- Android使用Application总结
- 011 吃药call功能分析和代码编写
- CentOS赋予一个普通用户root权限
- 开源游戏《一小时人生》GitHub仓库被删,CEO亲自道歉
- asp.net mvc中加入log4net记录错误日志
- java byte to integer_Java中的Byte转为无符号的Integer
- OpenCV学习笔记——多种Smooth平滑处理
- Linux中mount挂载命令及其概念
- 【vn.py】源码解析之 Dual Thrust 策略
- 《信号与系统学习笔记》—线性反馈系统(二)
- Transformer模型详解
- 读“技术的执念”有感
- 【更新】京东、美团、饿了么获取cookies
- 控制成本,控制成本知识点,挣值和实际成本、EAC,ETC.TCPI解析表
- 计算机管理打印机服务,win7系统打印机服务怎样开启 开启打印机服务的设置方法...
- java file outside of source root - IDEA中的java文件突然出现这样的提示
- 重装系统后的QQ聊天记录恢复方法与教程
- P9-前端基础-CSS简介
- 用户故事与敏捷方法 - 第十章 迭代故事