比赛 20161116 评测结果 AAAATTTTTT
题目名称 新型武器 最终得分 40
用户昵称 kxxy 运行时间 6.021 s
代码语言 C++ 内存使用 6.04 MiB
提交时间 2016-11-16 11:29:14
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn=300010;
int N,Q,pd,fro,to,ans=0;
vector<int>v[maxn];
int val[maxn];
int deep[maxn]={0},deepth=0;
inline int read()
{
	int x=0;
	char c=getchar();
	while(c>'9'||c<'0')
		c=getchar();
	while(c<='9'&&c>='0')
	{
		x=x*10+c-'0';
		c=getchar();
	}
	return x;
}
inline void change(int u,int v)
{
	val[u]=v;
}
inline int summ(int u,int c,int d)
{
	int ans=0,l=v[u].size();
	if(d==c)
		return val[u];
	for(int i=0;i<l;i++)
		ans+=summ(v[u][i],c,d+1);
	return ans;
}
int main()
{
	freopen("newweapon.in","r",stdin);
	freopen("newweapon.out","w",stdout);
	N=read();
	for(int i=1;i<=N;i++)
		val[i]=read();
	for(int i=1;i<=N-1;i++)
	{
		fro=read(),to=read();
		v[fro].push_back(to);
		
	}
	Q=read();
	int u,v;
	for(int i=1;i<=Q;i++)
	{
		pd=read(),u=read(),v=read();
		if(pd==1)
			change(u,v);
		else
			printf("%d\n",summ(u,v,0));
	}
	return 0;
}