不是这也太逆天了
while(top[x]!=top[y]){
if(fa[top[x]]<fa[top[y]])swap(x,y);
modify(1,1,n,id[top[x]],id[x],z,op);
x=fa[top[x]];
}
还有
while(top[x]!=top[y]){
if(fa[top[x]]<fa[top[y]])swap(x,y);
int k=query(1,1,n,id[top[x]],id[x],op);
if(op==1)ans+=k;
if(op==2)ans=min(ans,k);
if(op==3)ans=max(ans,k);
x=fa[top[x]];
}
显然 if(fa[top[x]]<fa[top[y]]) 应当改成 if(dep[top[x]]<dep[top[y]])。
但是能 AC。