fork(4) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define pb push_back
  5. const int N = 100001;
  6.  
  7. int a[N];
  8. vector<int>G[N];
  9. int sum[N];
  10.  
  11. int dfs(int cur,int par){
  12.  
  13. int x = G[cur].size();
  14.  
  15. sum[cur] = a[cur];
  16.  
  17. for(int i = 0;i < x; i++){
  18. int v = G[cur][i];
  19. if(v!=par){
  20. sum[cur] += dfs(v,cur);
  21. }
  22. }
  23.  
  24. return sum[cur];
  25. }
  26.  
  27. void dfs1(int cur,int par){
  28.  
  29. int x = G[cur].size();
  30.  
  31. sum[cur] = a[cur];
  32.  
  33. for(int i = 0;i < x; i++){
  34.  
  35. int v = G[cur][i];
  36. if(v!=par){
  37. dfs1(v,cur);
  38. sum[cur] += sum[v];
  39. }
  40. }
  41.  
  42. }
  43.  
  44.  
  45. int main(){
  46. int n;
  47. cin>>n;
  48. for(int i=1;i<=n;i++){
  49. cin>>a[i];
  50. }
  51. for(int i=1;i<n;i++){
  52. int u,v;
  53. cin>>u>>v;
  54. G[u].pb(v);
  55. G[v].pb(u);
  56. }
  57. dfs(1,0);
  58. int q;
  59. cin>>q;
  60. while(q--){
  61. int x;
  62. cin>>x;
  63. printf("%d\n",sum[x]);
  64. }
  65. }
Success #stdin #stdout 0s 5448KB
stdin
6
1 8 3 2 0 4
1 2
2 4
2 5
1 3
3 6
6
1
2
3
4
5
6
stdout
18
10
7
2
0
4