#include <cstdio>
#include <iostream>
using namespace std;
int n,m,top=0,a[1000009];
int bian[1000009][2];
bool is_fa(int now,int ifs){
if(ifs==1&&now==1){
return false;
}
if(now==1){
return true;
}
for(int i=0;i<top;i++){
if(bian[i][0]==now&&bian[i][1]!=ifs){
if(is_fa(bian[i][1],bian[i][0])){
return true;
}
}
if(bian[i][1]==now&&bian[i][0]!=ifs){
if(is_fa(bian[i][0],bian[i][1])){
return true;
}
}
}
return false;
}
void dfs(int x,int y){
a[x]+=y;
for(int i=0;i<top;i++){
if(bian[i][0]==x){
if(!is_fa(bian[i][1],x)){
dfs(bian[i][1],y);
}
}
if(bian[i][1]==x){
if(!is_fa(bian[i][0],x)){
dfs(bian[i][0],y);
}
}
}
}
int main(){
freopen("deploy.in","r",stdin);
freopen("deploy.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
bian[top][0]=x;
bian[top++][1]=y;
}
cin>>m;
while(m--){
int p,x,y;
cin>>p>>x>>y;
if(p==1){
dfs(x,y);
}else{
a[x]+=y;
for(int i=0;i<top;i++){
if(bian[i][0]==x){
a[bian[i][1]]+=y;
}
if(bian[i][1]==x){
a[bian[i][0]]+=y;
}
}
}
}
int q;cin>>q;
while(q--){
int x;cin>>x;
cout<<a[x]<<endl;
}
fclose(stdin);
fclose(stdout);
return 0;
}