比赛 20161116 评测结果 AAAATTTTTT
题目名称 新型武器 最终得分 40
用户昵称 kxxy 运行时间 6.021 s
代码语言 C++ 内存使用 6.04 MiB
提交时间 2016-11-16 11:29:14
显示代码纯文本
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. using namespace std;
  5. const int maxn=300010;
  6. int N,Q,pd,fro,to,ans=0;
  7. vector<int>v[maxn];
  8. int val[maxn];
  9. int deep[maxn]={0},deepth=0;
  10. inline int read()
  11. {
  12. int x=0;
  13. char c=getchar();
  14. while(c>'9'||c<'0')
  15. c=getchar();
  16. while(c<='9'&&c>='0')
  17. {
  18. x=x*10+c-'0';
  19. c=getchar();
  20. }
  21. return x;
  22. }
  23. inline void change(int u,int v)
  24. {
  25. val[u]=v;
  26. }
  27. inline int summ(int u,int c,int d)
  28. {
  29. int ans=0,l=v[u].size();
  30. if(d==c)
  31. return val[u];
  32. for(int i=0;i<l;i++)
  33. ans+=summ(v[u][i],c,d+1);
  34. return ans;
  35. }
  36. int main()
  37. {
  38. freopen("newweapon.in","r",stdin);
  39. freopen("newweapon.out","w",stdout);
  40. N=read();
  41. for(int i=1;i<=N;i++)
  42. val[i]=read();
  43. for(int i=1;i<=N-1;i++)
  44. {
  45. fro=read(),to=read();
  46. v[fro].push_back(to);
  47. }
  48. Q=read();
  49. int u,v;
  50. for(int i=1;i<=Q;i++)
  51. {
  52. pd=read(),u=read(),v=read();
  53. if(pd==1)
  54. change(u,v);
  55. else
  56. printf("%d\n",summ(u,v,0));
  57. }
  58. return 0;
  59. }
  60.