void Update(int x,int y)
{
Val[x].val[1][0]+=y-A[x];
A[x]=y;
mat bef,aft;
while(x)
{
bef=query(1,1,n,dfn[top[x]],dfn[ed[top[x]]]);
update(1,1,n,dfn[x]);
aft=query(1,1,n,dfn[top[x]],dfn[ed[top[x]]]);
x=F[top[x]];
if(!x)
{
break;
}
Val[x].val[0][0]+=std::max(std::max(aft.val[0][0],aft.val[0][1]),std::max(aft.val[1][0],aft.val[1][1]))-std::max(std::max(bef.val[0][0],bef.val[0][1]),std::max(bef.val[1][0],bef.val[1][1]));
Val[x].val[0][1]=Val[x].val[0][0];
Val[x].val[1][0]+=aft.val[0][0]-bef.val[0][0];//这里写成Val[x].val[1][0]+=std::max(aft.val[0][0],aft.val[1][0])-std::max(bef.val[0][0],bef.val[1][0]);就寄了
}
}