CF1076E:树状数组 + dfs

本文介绍CF1076E题目的解法,利用树状数组进行差分处理,实现对树中特定深度范围内的节点值更新与查询。通过深度优先搜索(DFS)遍历树结构,高效地完成题目要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CF1076E

题意:给你一棵以1为根的树,每次把以x为根,深度不大于k的点的值全部加上v。最后求每个结点的值。

题解

  • dfs从根开始遍历,那么遍历到每一个点,其深度是确定的。
  • x根的深度为dep,深度不大于k的点都加上v,相当于c[dep] + v,c[dep+k+1]-v,差分处理。
  • 最后x根处理完之后,还有c[dep]-v,c[dep+k+1] + v。因为要遍历其它根,都在同一层,排除这个根的影响。

代码

#include <bits/stdc++.h>
using namespace std;
#define sd second
#define ft first
typedef long long ll;
typedef pair<int,int>pii;
int const N = 300000 + 10;
int n,m;
ll c[N],ans[N];
vector<int>G[N];
vector<pii>p[N];
int lowbit(int x){return x&-x;}
void add(int i,int x){	
	while(i <= N){
		c[i] += x;
		i += lowbit(i);
	}
}
ll query(int i){
	ll sum = 0;
	while(i){
		sum += c[i];
		i -= lowbit(i);
	}
	return sum;
}
void dfs(int u,int fa,int dep){
	for(int i=0;i<p[u].size();i++){
		add(dep,p[u][i].sd);
		add(dep+p[u][i].ft+1,-p[u][i].sd);
	}
	ans[u] = query(dep);
	for(int i=0;i<G[u].size();i++){
		int v = G[u][i];
		if(v == fa)	continue;
		dfs(v,u,dep+1);
	}
	for(int i=0;i<p[u].size();i++){
		add(dep,-p[u][i].sd);
		add(dep+p[u][i].ft+1,p[u][i].sd);
	}
}
int main(){
	scanf("%d",&n);
	for(int i=0;i<n-1;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		G[u].push_back(v);
		G[v].push_back(u);
	}
	scanf("%d",&m);
	for(int i=0;i<m;i++){
		int u,dep,val;  
		scanf("%d%d%d",&u,&dep,&val);
		p[u].push_back(pii(dep,val));
	}
	dfs(1,0,1);
	for(int i=1;i<=n;i++)
		printf("%lld ",ans[i]);
	return 0;
}

 

95% emitting CompressionPlugin # # Fatal error in , line 0 # Fatal process out of memory: base::SmallVector::Grow # # # #FailureMessage Object: 000000C1929FE7C0 1: 00007FF70DAD158F 2: 00007FF70D9EC5CF 3: 00007FF70E6CDE32 4: 00007FF70DE27964 5: 00007FF70E158B83 6: 00007FF70E157C0A 7: 00007FF70E32C052 8: 00007FF70E32C190 9: 00007FF70E420131 10: 0000028DD964D097 PS G:\ruoyi\ruoyicloud\ecust-operate-web> npm run dev > xml@3.4.0 dev > vue-cli-service serve INFO Starting development server... 95% emitting CompressionPlugin # # Fatal error in , line 0 # Fatal process out of memory: base::SmallVector::Grow # # # #FailureMessage Object: 000000B3491FE170 1: 00007FF70DAD158F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+122159 2: 00007FF70D9EC5CF node::TriggerNodeReport+38239 3: 00007FF70E6CDE32 V8_Fatal+162 4: 00007FF70DE27964 v8::internal::wasm::BuildTFGraph+82628 5: 00007FF70E158B83 v8::base::TimeDelta::operator!=+34291 6: 00007FF70E157C0A v8::base::TimeDelta::operator!=+30330 7: 00007FF70E32C052 v8::internal::Builtins::code_handle+38418 8: 00007FF70E32C190 v8::internal::Builtins::code_handle+38736 9: 00007FF70E420131 v8::internal::SetupIsolateDelegate::SetupHeap+494641 10: 0000020B18C10BB7 PS G:\ruoyi\ruoyicloud\ecust-operate-web> npm run dev > xml@3.4.0 dev > vue-cli-service serve INFO Starting development server... 95% emitting CompressionPlugin # # Fatal error in , line 0 # Fatal process out of memory: base::SmallVector::Grow # # # #FailureMessage Object: 000000FC361FE2F0 1: 00007FF70DAD158F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+122159 2: 00007FF70D9EC5CF node::TriggerNodeReport+38239 3: 00007FF70E6CDE32 V8_Fatal+162 4: 00007FF70DE27964 v8::internal::wasm::BuildTFGraph+82628 5: 00007FF70E158B83 v8::base::TimeDelta::operator!=+34291 6: 00007FF70E157C0A v8::base::TimeDelta::operator!=+30330 7: 00007FF70E32C052 v8::internal::Builtins::code_handle+38418 8: 00007FF70E32C190 v8::internal::Builtins::code_handle+38736 9: 00007FF70E420131 v8::internal::SetupIsolateDelegate::SetupHeap+494641 10: 0000027D464B79B7 PS G:\ruoyi\ruoyicloud\ecust-operate-web> npm run dev > xml@3.4.0 dev > vue-cli-service serve INFO Starting development server... 95% emitting CompressionPlugin # # Fatal error in , line 0 # Fatal process out of memory: base::SmallVector::Grow # # # #FailureMessage Object: 000000DD181FE3C0 1: 00007FF70DAD158F v8::internal::CodeObjectRegistry::~CodeObjectRegistry+122159 2: 00007FF70D9EC5CF node::TriggerNodeReport+38239 3: 00007FF70E6CDE32 V8_Fatal+162 4: 00007FF70DE27964 v8::internal::wasm::BuildTFGraph+82628 5: 00007FF70E158B83 v8::base::TimeDelta::operator!=+34291 6: 00007FF70E157C0A v8::base::TimeDelta::operator!=+30330 7: 00007FF70E32C052 v8::internal::Builtins::code_handle+38418 8: 00007FF70E32C190 v8::internal::Builtins::code_handle+38736 9: 00007FF70E420131 v8::internal::SetupIsolateDelegate::SetupHeap+494641 10: 0000024336D035F7
最新发布
06-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值