比赛 |
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;
- }
-