记录编号 351511 评测结果 AAAATTTTTT
题目名称 新型武器 最终得分 40
用户昵称 GravatarExtreme°/极致 ° 是否通过 未通过
代码语言 C++ 运行时间 6.014 s
提交时间 2016-11-16 16:53:10 内存使用 6.37 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define N 300001 
int n,q,w[N],ans;
vector<int>g[N];
vector<int>son[N];
int d[N],f[N];
void dfsinit(int cur,int fa,int di)
{
	d[cur]=di;f[cur]=fa;
	for(int i=0;i<g[cur].size();i++)
	{
		int t=g[cur][i];
		if(t!=fa)
		{
			son[cur].push_back(t);
			dfsinit(t,cur,di+1);
		}
	}
}
void dfs(int u,int cur,int c)
{
	if(d[cur]-d[u]==c)
	{
		ans+=w[cur];
		return;
	}
	for(int i=0;i<son[cur].size();i++)
		dfs(u,son[cur][i],c);	
}
int work()
{	
	freopen("newweapon.in","r",stdin);
	freopen("newweapon.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&w[i]);
	int t1,t2,t3;
	for(int i=1;i<=n-1;i++)
	{
		scanf("%d%d",&t1,&t2);
		g[t1].push_back(t2);
		g[t2].push_back(t1);
	}
	dfsinit(1,1,0);
	scanf("%d",&q);
	for(int i=1;i<=q;i++)
	{
		scanf("%d%d%d",&t1,&t2,&t3);
		if(t1==1)
			w[t2]=t3;
		else
		{
			ans=0;
			dfs(t2,t2,t3);
			printf("%d\n",ans);
		}	
	}
	return 0;
}
int heh=work();
int main(){;}