AC #4#5,其他 WA
#include<bits/stdc++.h>
using namespace std;
constexpr int N=1e6+3;
struct edge{int to,nxt;}E[N<<1];
int head[N],tot=1;
inline void add(int u,int v){
E[++tot].nxt=head[u];
E[head[u]=tot].to=v;
return;
}
int fa[N],sz[N],hson[N],dep[N];
inline void dfs1(int u,int f){
dep[u]=dep[fa[u]=f]+(sz[u]=1);
for(int i=head[u],v;i;i=E[i].nxt){
v=E[i].to;
if(v==f) continue;
dfs1(v,u);
sz[u]+=sz[v];
if(sz[v]>sz[hson[u]]) hson[u]=v;
}
return;
}
int dfn[N],idx=0,w[N],top[N],a[N],sonl[N],sonr[N];
inline void dfs2(int u,int t){
if(!fa[u]) dfn[u]=++idx;
top[u]=t,w[dfn[u]]=a[u];
if(!hson[u]) return;
dfn[hson[u]]=++idx;
dfs2(hson[u],t);
for(int i=head[u],v;i;i=E[i].nxt){
v=E[i].to;
if(v==fa[u]||v==hson[u]) continue;
dfn[v]=++idx;
if(!sonl[u]) sonl[u]=dfn[v];
sonr[u]=dfn[v];
}
for(int i=head[u],v;i;i=E[i].nxt){
v=E[i].to;
if(v==fa[u]||v==hson[u]) continue;
dfs2(v,v);
}
return;
}
signed main(){
ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
int n;cin>>n;
for(int i=1;i<=n;++i) cin>>a[i];
for(int i=1,u,v;i<n;++i) cin>>u>>v,add(u,v),add(v,u);
dfs1(1,0),dfs2(1,1);
for(int i=1;i<=n;++i) a[i]=w[i]-w[i-1];
int m;cin>>m;
for(int op,x,y;m--;){
cin>>op>>x>>y;
if(op==1){
a[dfn[x]]+=y,a[dfn[x]+1]-=y;
a[dfn[hson[x]]]+=y,a[dfn[hson[x]]+sz[x]-1]-=y;
}else{
a[dfn[fa[x]]]+=y,a[dfn[fa[x]]+1]-=y;
a[dfn[x]]+=y,a[dfn[x]+1]-=y;
a[dfn[hson[x]]]+=y,a[dfn[hson[x]]+1]-=y;
a[dfn[sonl[x]]]+=y,a[dfn[sonr[x]]+1]-=y;
}
}
for(int i=1;i<=n;++i) a[i]=a[i]+a[i-1];
int q;cin>>q;
for(int x;q--;) cin>>x,cout<<a[dfn[x]]<<'\n';
return 0;
}