#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
#include <ctime>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <vector>
#define REP(I,A,B) for(int I=A,_END_=B;I<=_END_;I++)
#define REPD(I,A,B) for(int I=A,_END_=B;I>=_END_;I--)
#define RI(X) X=Readint()
#define RII(X,Y) RI(X),RI(Y)
#define RIII(X,Y,Z) RI(X),RI(Y),RI(Z)
#define RS(X) scanf("%s",X)
#define RD(X) scanf("%lf",&X)
#define GCH getchar()
#define PCH(X) putchar(X)
#define MS(X,Y) memset(X,Y,sizeof(X))
#define MC(X,Y,var,len) memcpy(X,Y,sizeof(var)*(len))
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define pb(X) push_back(X)
#define mp(A,B) make_pair(A,B)
#define fr first
#define sc second
#define lch(p) (p+p)
#define rch(p) (p+p+1)
#define lowbit(X) ((X)&(-(X)))
using namespace std;
typedef pair<int,int> poi;
inline int Readint()
{
int ret=0;
int f=1;
char ch;
do
{
ch=GCH;
if (ch=='-') f*=-1;
}while(ch>=0 && (ch<'0' || ch>'9'));
while ('0'<=ch && ch<='9')
{
ret=ret*10+ch-'0';
ch=GCH;
}
return ret*f;
}
void open()
{
freopen("GSS7.in","r",stdin);
freopen("GSS7.out","w",stdout);
}
void close()
{
fclose(stdin);
fclose(stdout);
}
const int MAXN = 101010;
const int inf = 11111;
int tot;
int to[MAXN*2]={0};
int nxt[MAXN*2]={0};
int hd[MAXN];
int n;
inline void add(const int &x,const int &y){
tot++;
to[tot]=y;
nxt[tot]=hd[x];
hd[x]=tot;
}
struct lct{
bool rev;
bool rt;
int sz;
int sum,mx,lm,rm,val,ocr;
int c[2];
int fa;
lct(){}
lct(int vl){
c[0]=c[1]=fa=0;
ocr=inf;
rt=true;
rev=false;
sum=mx=lm=rm=vl;
val=vl;
sz=1;
}
}t[MAXN];
inline void occur(const int &p,int c){
t[p].sum=t[p].lm=t[p].rm=t[p].mx=c*t[p].sz;
t[p].ocr=t[p].val=c;
}
inline void update_rev(int p){
if (!p) return ;
swap(t[p].c[0],t[p].c[1]);
swap(t[p].lm,t[p].rm);
t[p].rev^=1;
}
inline void maintain(int p){
t[p].sz=t[t[p].c[0]].sz+t[t[p].c[1]].sz+1;
t[p].mx=max(max(t[t[p].c[0]].rm,0)+t[p].val+max(t[t[p].c[1]].lm,0),max(t[t[p].c[0]].mx,t[t[p].c[1]].mx));
t[p].sum=t[t[p].c[0]].sum+t[t[p].c[1]].sum+t[p].val;
t[p].lm=max(t[t[p].c[0]].lm,t[t[p].c[0]].sum+t[p].val+max(t[t[p].c[1]].lm,0));
t[p].rm=max(max(t[t[p].c[0]].rm,0)+t[p].val+t[t[p].c[1]].sum,t[t[p].c[1]].rm);
}
inline void pushdown(int p){
if (t[p].rev)
{
update_rev(t[p].c[0]);
update_rev(t[p].c[1]);
t[p].rev=false;
}
if (t[p].ocr!=inf)
{
if (t[p].c[0])
occur(t[p].c[0],t[p].ocr);
if (t[p].c[1])
occur(t[p].c[1],t[p].ocr);
t[p].ocr=inf;
}
}
inline void setc(const int &p,const int &x,const int &kd){
if (p) t[p].c[kd]=x;
if (x) t[x].fa=p;
}
void rotate(int x){
if (!t[x].fa) return ;
int p=t[x].fa;
pushdown(p);
pushdown(x);
int mark=t[p].c[1]==x;
if (t[p].rt)
{
t[p].rt=false;
t[x].rt=true;
t[x].fa=t[p].fa;
}
else
setc(t[p].fa,x,t[t[p].fa].c[1]==p);
setc(p,t[x].c[mark^1],mark);
setc(x,p,mark^1);
maintain(p);
maintain(x);
}
void splay(int x){
pushdown(x);
while (!t[x].rt)
{
if (t[t[x].fa].rt)
{
rotate(x);
break;
}
if ((t[t[t[x].fa].fa].c[0]==t[x].fa)==(t[t[x].fa].c[0]==x))
rotate(t[x].fa);
else
rotate(x);
rotate(x);
}
}
int expose(int x){
int y=0;
do
{
splay(x);
t[t[x].c[1]].rt=true;
t[x].c[1]=y;
t[y].rt=false;
maintain(x);
x=t[y=x].fa;
}while(x);
return y;
}
int mroot(int x){
expose(x);
splay(x);
update_rev(x);
}
void init()
{
RI(n);
int x,y;
REP(i,1,n) RI(x),t[i]=lct(x);
REP(i,2,n) RII(x,y),add(x,y),add(y,x);
}
void dfs(int p,int fa=0){
for (int i=hd[p];i;i=nxt[i])
if (to[i]!=fa)
{
t[to[i]].fa=p;
dfs(to[i],p);
}
}
void work(){
int _=0;
RI(_);
int op;
int a,b,c;
int now;
REP(__,1,_)
{
RI(op);
RII(a,b);
mroot(a);
now=expose(b);
if (op&1)
printf("%d\n",max(t[now].mx,0));
else
{
RI(c);
occur(now,c);
}
}
}
int main()
{
//open();
int _=0;
init();
dfs(1);
work();
close();
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxjbWF0aD4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDx2ZWN0b3I+CgojZGVmaW5lIFJFUChJLEEsQikgZm9yKGludCBJPUEsX0VORF89QjtJPD1fRU5EXztJKyspCiNkZWZpbmUgUkVQRChJLEEsQikgZm9yKGludCBJPUEsX0VORF89QjtJPj1fRU5EXztJLS0pCiNkZWZpbmUgUkkoWCkgWD1SZWFkaW50KCkKI2RlZmluZSBSSUkoWCxZKSBSSShYKSxSSShZKQojZGVmaW5lIFJJSUkoWCxZLFopIFJJKFgpLFJJKFkpLFJJKFopCiNkZWZpbmUgUlMoWCkgc2NhbmYoIiVzIixYKQojZGVmaW5lIFJEKFgpIHNjYW5mKCIlbGYiLCZYKQojZGVmaW5lIEdDSCBnZXRjaGFyKCkKI2RlZmluZSBQQ0goWCkgcHV0Y2hhcihYKQojZGVmaW5lIE1TKFgsWSkgbWVtc2V0KFgsWSxzaXplb2YoWCkpCiNkZWZpbmUgTUMoWCxZLHZhcixsZW4pIG1lbWNweShYLFksc2l6ZW9mKHZhcikqKGxlbikpCiNkZWZpbmUgZGVidWcoLi4uKSBmcHJpbnRmKHN0ZGVycixfX1ZBX0FSR1NfXykKI2RlZmluZSBwYihYKSBwdXNoX2JhY2soWCkKI2RlZmluZSBtcChBLEIpIG1ha2VfcGFpcihBLEIpCiNkZWZpbmUgZnIgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKI2RlZmluZSBsY2gocCkgKHArcCkKI2RlZmluZSByY2gocCkgKHArcCsxKQojZGVmaW5lIGxvd2JpdChYKSAoKFgpJigtKFgpKSkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIHBhaXI8aW50LGludD4gcG9pOwoKaW5saW5lIGludCBSZWFkaW50KCkKewoJaW50IHJldD0wOwoJaW50IGY9MTsKCWNoYXIgY2g7CglkbwoJewoJCWNoPUdDSDsKCQlpZiAoY2g9PSctJykgZio9LTE7Cgl9d2hpbGUoY2g+PTAgJiYgKGNoPCcwJyB8fCBjaD4nOScpKTsKCQoJd2hpbGUgKCcwJzw9Y2ggJiYgY2g8PSc5JykKCXsKCQlyZXQ9cmV0KjEwK2NoLScwJzsKCQljaD1HQ0g7Cgl9CglyZXR1cm4gcmV0KmY7Cn0KCnZvaWQgb3BlbigpCnsKCWZyZW9wZW4oIkdTUzcuaW4iLCJyIixzdGRpbik7CglmcmVvcGVuKCJHU1M3Lm91dCIsInciLHN0ZG91dCk7Cn0Kdm9pZCBjbG9zZSgpCnsKCWZjbG9zZShzdGRpbik7CglmY2xvc2Uoc3Rkb3V0KTsKfQoKY29uc3QgaW50IE1BWE4gPSAxMDEwMTA7CmNvbnN0IGludCBpbmYgPSAxMTExMTsKCmludCB0b3Q7CmludCB0b1tNQVhOKjJdPXswfTsKaW50IG54dFtNQVhOKjJdPXswfTsKaW50IGhkW01BWE5dOwoKaW50IG47CgppbmxpbmUgdm9pZCBhZGQoY29uc3QgaW50ICZ4LGNvbnN0IGludCAmeSl7Cgl0b3QrKzsKCXRvW3RvdF09eTsKCW54dFt0b3RdPWhkW3hdOwoJaGRbeF09dG90Owp9CgpzdHJ1Y3QgbGN0ewoJYm9vbCByZXY7Cglib29sIHJ0OwoJaW50IHN6OwoJaW50IHN1bSxteCxsbSxybSx2YWwsb2NyOwoJaW50IGNbMl07CglpbnQgZmE7CglsY3QoKXt9CglsY3QoaW50IHZsKXsKCQljWzBdPWNbMV09ZmE9MDsKCQlvY3I9aW5mOwoJCXJ0PXRydWU7CgkJcmV2PWZhbHNlOwoJCXN1bT1teD1sbT1ybT12bDsKCQl2YWw9dmw7CgkJc3o9MTsKCX0KfXRbTUFYTl07CgppbmxpbmUgdm9pZCBvY2N1cihjb25zdCBpbnQgJnAsaW50IGMpewoJdFtwXS5zdW09dFtwXS5sbT10W3BdLnJtPXRbcF0ubXg9Yyp0W3BdLnN6OwoJdFtwXS5vY3I9dFtwXS52YWw9YzsKfQoKaW5saW5lIHZvaWQgdXBkYXRlX3JldihpbnQgcCl7CglpZiAoIXApIHJldHVybiA7Cglzd2FwKHRbcF0uY1swXSx0W3BdLmNbMV0pOwoJc3dhcCh0W3BdLmxtLHRbcF0ucm0pOwoJdFtwXS5yZXZePTE7Cn0KCmlubGluZSB2b2lkIG1haW50YWluKGludCBwKXsKCXRbcF0uc3o9dFt0W3BdLmNbMF1dLnN6K3RbdFtwXS5jWzFdXS5zeisxOwoJdFtwXS5teD1tYXgobWF4KHRbdFtwXS5jWzBdXS5ybSwwKSt0W3BdLnZhbCttYXgodFt0W3BdLmNbMV1dLmxtLDApLG1heCh0W3RbcF0uY1swXV0ubXgsdFt0W3BdLmNbMV1dLm14KSk7Cgl0W3BdLnN1bT10W3RbcF0uY1swXV0uc3VtK3RbdFtwXS5jWzFdXS5zdW0rdFtwXS52YWw7Cgl0W3BdLmxtPW1heCh0W3RbcF0uY1swXV0ubG0sdFt0W3BdLmNbMF1dLnN1bSt0W3BdLnZhbCttYXgodFt0W3BdLmNbMV1dLmxtLDApKTsKCXRbcF0ucm09bWF4KG1heCh0W3RbcF0uY1swXV0ucm0sMCkrdFtwXS52YWwrdFt0W3BdLmNbMV1dLnN1bSx0W3RbcF0uY1sxXV0ucm0pOwp9CgppbmxpbmUgdm9pZCBwdXNoZG93bihpbnQgcCl7CglpZiAodFtwXS5yZXYpCgl7CgkJdXBkYXRlX3Jldih0W3BdLmNbMF0pOwoJCXVwZGF0ZV9yZXYodFtwXS5jWzFdKTsKCQl0W3BdLnJldj1mYWxzZTsKCX0KCglpZiAodFtwXS5vY3IhPWluZikKCXsKCQlpZiAodFtwXS5jWzBdKQoJCQlvY2N1cih0W3BdLmNbMF0sdFtwXS5vY3IpOwoJCWlmICh0W3BdLmNbMV0pCgkJCW9jY3VyKHRbcF0uY1sxXSx0W3BdLm9jcik7CgkJdFtwXS5vY3I9aW5mOwoJfQp9CgppbmxpbmUgdm9pZCBzZXRjKGNvbnN0IGludCAmcCxjb25zdCBpbnQgJngsY29uc3QgaW50ICZrZCl7CglpZiAocCkgdFtwXS5jW2tkXT14OwoJaWYgKHgpIHRbeF0uZmE9cDsKfQoKdm9pZCByb3RhdGUoaW50IHgpewoJaWYgKCF0W3hdLmZhKSByZXR1cm4gOwoJaW50IHA9dFt4XS5mYTsKCXB1c2hkb3duKHApOwoJcHVzaGRvd24oeCk7CgoJaW50IG1hcms9dFtwXS5jWzFdPT14OwoKCWlmICh0W3BdLnJ0KQoJewoJCXRbcF0ucnQ9ZmFsc2U7CgkJdFt4XS5ydD10cnVlOwoJCXRbeF0uZmE9dFtwXS5mYTsKCX0KCWVsc2UKCQlzZXRjKHRbcF0uZmEseCx0W3RbcF0uZmFdLmNbMV09PXApOwoJc2V0YyhwLHRbeF0uY1ttYXJrXjFdLG1hcmspOwoJc2V0Yyh4LHAsbWFya14xKTsKCQoJbWFpbnRhaW4ocCk7CgltYWludGFpbih4KTsKfQoKdm9pZCBzcGxheShpbnQgeCl7CglwdXNoZG93bih4KTsKCXdoaWxlICghdFt4XS5ydCkKCXsKCQlpZiAodFt0W3hdLmZhXS5ydCkKCQl7CgkJCXJvdGF0ZSh4KTsKCQkJYnJlYWs7CgkJfQoJCWlmICgodFt0W3RbeF0uZmFdLmZhXS5jWzBdPT10W3hdLmZhKT09KHRbdFt4XS5mYV0uY1swXT09eCkpCgkJCXJvdGF0ZSh0W3hdLmZhKTsKCQllbHNlCgkJCXJvdGF0ZSh4KTsKCQlyb3RhdGUoeCk7Cgl9Cn0KCmludCBleHBvc2UoaW50IHgpewoJaW50IHk9MDsKCWRvCgl7CgkJc3BsYXkoeCk7CgkJdFt0W3hdLmNbMV1dLnJ0PXRydWU7CgkJdFt4XS5jWzFdPXk7CgkJdFt5XS5ydD1mYWxzZTsKCQltYWludGFpbih4KTsKCQl4PXRbeT14XS5mYTsKCX13aGlsZSh4KTsKCXJldHVybiB5Owp9CgppbnQgbXJvb3QoaW50IHgpewoJZXhwb3NlKHgpOwoJc3BsYXkoeCk7Cgl1cGRhdGVfcmV2KHgpOwp9Cgp2b2lkIGluaXQoKQp7CglSSShuKTsKCWludCB4LHk7CglSRVAoaSwxLG4pIFJJKHgpLHRbaV09bGN0KHgpOwoJUkVQKGksMixuKSBSSUkoeCx5KSxhZGQoeCx5KSxhZGQoeSx4KTsKfQoKdm9pZCBkZnMoaW50IHAsaW50IGZhPTApewoJZm9yIChpbnQgaT1oZFtwXTtpO2k9bnh0W2ldKQoJaWYgKHRvW2ldIT1mYSkKCXsKCQl0W3RvW2ldXS5mYT1wOwoJCWRmcyh0b1tpXSxwKTsKCX0KfQoKdm9pZCB3b3JrKCl7CglpbnQgXz0wOwoJUkkoXyk7CglpbnQgb3A7CglpbnQgYSxiLGM7CglpbnQgbm93OwoJUkVQKF9fLDEsXykKCXsKCQlSSShvcCk7CgkJUklJKGEsYik7CgkJbXJvb3QoYSk7CgkJbm93PWV4cG9zZShiKTsKCQlpZiAob3AmMSkKCQkJcHJpbnRmKCIlZFxuIixtYXgodFtub3ddLm14LDApKTsKCQllbHNlCgkJewoJCQlSSShjKTsKCQkJb2NjdXIobm93LGMpOwoJCX0KCX0KfQoKaW50IG1haW4oKQp7CgkvL29wZW4oKTsKCWludCBfPTA7Cglpbml0KCk7CglkZnMoMSk7Cgl3b3JrKCk7CgljbG9zZSgpOwoJcmV0dXJuIDA7Cn0KCg==