我的做法:

给询问按$deep[v]+d$排序,每次做到某一深度的时候,先给这个深度所有点的值清0,然后直接改v的子树

官方做法比较妙妙:

dfs,进入v的时候给$[deep[v],deep[v]+d]+=x$,出来的时候再减回来

日常忘开longlong,这回事变量开了输出没开

 #pragma GCC optimize(3)
#include<bits/stdc++.h>
#define pa pair<ll,ll>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=3e5+; inline char gc(){
return getchar();
static const int maxs=<<;static char buf[maxs],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,maxs,stdin),p1==p2)?EOF:*p1++;
}
inline ll rd(){
ll x=;char c=gc();bool neg=;
while(c<''||c>''){if(c=='-') neg=;c=gc();}
while(c>=''&&c<='') x=(x<<)+(x<<)+c-'',c=gc();
return neg?(~x+):x;
} struct Q{
int p,d,x;
};
int N,M,mdep,eg[maxn*][],egh[maxn],ect;
int dfn[maxn][],tot,dep[maxn];
vector<int> poi[maxn];
vector<Q> que[maxn];
ll v[maxn<<],laz[maxn<<]; inline void adeg(int a,int b){
eg[++ect][]=b,eg[ect][]=egh[a],egh[a]=ect;
} inline void dfs(int x,int f){
dfn[x][]=++tot;mdep=max(mdep,dep[x]);
poi[dep[x]].push_back(x);
for(int i=egh[x];i;i=eg[i][]){
int b=eg[i][];if(b==f) continue;
dep[b]=dep[x]+;dfs(b,x);
}
dfn[x][]=tot;
} inline void pushdown(int p){
if(!laz[p]) return;
int a=p<<,b=p<<|;
laz[a]+=laz[p],v[a]+=laz[p];
laz[b]+=laz[p],v[b]+=laz[p];
laz[p]=;
} inline void add(int p,int l,int r,int x,int y,int z){
if(x<=l&&r<=y){
v[p]+=z,laz[p]+=z;
}else{
int m=l+r>>;
pushdown(p);
if(x<=m) add(p<<,l,m,x,y,z);
if(y>=m+) add(p<<|,m+,r,x,y,z);
}
} inline void change(int p,int l,int r,int x,int y){
if(l==r) v[p]=y;
else{
int m=l+r>>;pushdown(p);
if(x<=m) change(p<<,l,m,x,y);
else change(p<<|,m+,r,x,y);
}
} ll ans[maxn];
inline void query(int p,int l,int r){
if(l==r) ans[l]=v[p];
else{
pushdown(p);
int m=l+r>>;
query(p<<,l,m);query(p<<|,m+,r);
}
} int main(){
//freopen("","r",stdin);
int i,j,k;
N=rd();
for(i=;i<N;i++){
int a=rd(),b=rd();
adeg(a,b);adeg(b,a);
}M=rd();
dep[]=;dfs(,);
for(i=;i<=M;i++){
Q q;
q.p=rd(),q.d=rd(),q.x=rd();
que[min(dep[q.p]+q.d,mdep)].push_back(q);
}
for(i=;i<=mdep;i++){
for(j=;j<poi[i].size();j++) change(,,N,dfn[poi[i][j]][],);
for(j=;j<que[i].size();j++){
int p=que[i][j].p;
add(,,N,dfn[p][],dfn[p][],que[i][j].x);
}
}
query(,,N);
for(i=;i<=N;i++)
printf("%I64d ",ans[dfn[i][]]);
return ;
}

cf1076E Vasya and a Tree (线段树)的更多相关文章

  1. CF 1076E Vasya and a Tree(线段树+树剖)

    传送门 解题思路 首先按照每个修改时\(x\)的深度\(+d\)从大到小排序,然后按照深度分层,一层一层的修改,修改的时候就直接暴力修改子树,然后每做完一层把答案都取下来,因为以后的所有修改的深度都小 ...

  2. Codeforces 1107G Vasya and Maximum Profit 线段树最大子段和 + 单调栈

    Codeforces 1107G 线段树最大子段和 + 单调栈 G. Vasya and Maximum Profit Description: Vasya got really tired of t ...

  3. BZOJ.3307.雨天的尾巴(dsu on tree/线段树合并)

    BZOJ 洛谷 \(dsu\ on\ tree\).(线段树合并的做法也挺显然不写了) 如果没写过\(dsu\)可以看这里. 对修改操作做一下差分放到对应点上,就成了求每个点子树内出现次数最多的颜色, ...

  4. HDU 3333 Turing Tree (线段树)

    Turing Tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  5. CodeForces 620E New Year Tree(线段树的骚操作第二弹)

    The New Year holidays are over, but Resha doesn't want to throw away the New Year tree. He invited h ...

  6. HDU 3333 Turing Tree 线段树+离线处理

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3333 Turing Tree Time Limit: 6000/3000 MS (Java/Othe ...

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

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

  8. 【UOJ388】配对树(dsu on tree+线段树)

    传送门 题意: 给出一颗含有\(n\)个结点的无根树,之后给出一个长度为\(m\)的序列,每个元素在\([1,n]\)之间. 现在序列中每个长度为偶数的区间的完成时间定义为树上最小配对方法中每对匹配点 ...

  9. 【cf375】D. Tree and Queries(dsu on tree+线段树)

    传送门 题意: 给出一颗以\(1\)为根的有根树,每个结点有个颜色\(c_i\). 之后要回答\(m\)组询问,每组询问包含\(v_i,k_i\),要回答以\(v_i\)为根的子树中,颜色出现次数不小 ...

随机推荐

  1. Mysql占用CPU过高如何优化?(转)

    原文:http://bbs.landingbj.com/t-0-241441-1.html MySQL处在高负载环境下,磁盘IO读写过多,肯定会占用很多资源,必然CP会U占用过高. 占用CPU过高,可 ...

  2. 城市联动 - 自动生成SQL语句

    字段比较简单/  如果有需要可以自己定制字段和排序/ 一共二级城市联动, 本人业务需要, 所以就两层, 网上关于三层的挺多, 有需要可以借鉴/ 废话不多说, 先看效果图, 代码在下面 <?php ...

  3. 使用synchronized 实现ReentrantLock(美团面试题目)

    刚看到这个题目的时候无从下手,因为觉得synchronized和lock在加锁的方式上有很大不同,比如,看看正常情况下synchronized时如何加锁的. 方式一: public synchroni ...

  4. 如何使用命令从linux服务器下载文件到windows

    1.直接使用命令从linux下载文件到windows //登录linux服务器导出mysql数据 mysqldump -hrm-2ze8mpi5i65429l1q.mysql.rds.aliyuncs ...

  5. SWT 几个sample网站

    https://www.programcreek.com/java-api-examples/org.eclipse.swt.custom.ScrolledComposite https://o7pl ...

  6. build/temp.linux-x86_64-2.7/_openssl.c:493:30: fatal error: openssl/opensslv.h: No such file or directory

    解决:apt-get install libssl-dev apt install python-dev(这个可能和那个错误关系不大)

  7. 微信小程序flex佈局

    聲明:display:flex 換行flex-wrap:flex-wrap:nowrap(不換行).wrap(換行).wrap-reserve(第一行在下面): 主軸對齊(橫向對齊)justify-c ...

  8. Go For It ,一个灵活的待办事项列表程序

    导读 Go For It,是我们开源工具系列中的第十个工具,它将使你在 2019 年更高效,它在 Todo.txt 系统的基础上构建,以帮助你完成更多工作. 每年年初似乎都有疯狂的冲动想提高工作效率. ...

  9. 了解AutoCAD对象层次结构 —— 6 ——块表记录

    块表记录是包裹实体对象的最后一层包装了,接下来让我们继续利用MgdDbg工具查看上一小节创建的块定义内的对象有哪些. 操作步骤如下:选择块表记录TestBlock,在右侧列表中找到“Entities ...

  10. JSON笔记

    JSPN示例1: { "firstName": "Brett", "lastName":"McLaughlin", &q ...