求u到根节点(1) 的路径上的点权和
(已经把根节点的父亲设置为自己)
过不了的:
if(op==3)
{
ll res=0;
while(u!=1)
{
res+=ask(1,seg[top[u]],seg[u]);
u=fa[top[u]];
}
printf("%lld\n",res);
}
可以过的:
if(op==3)
{
ll res=0;
while(top[u]!=1)
{
res+=ask(1,seg[top[u]],seg[u]);
u=fa[top[u]];
}
res+=ask(1,1,seg[u]);
printf("%lld\n",res);
}
把第二种的
res+=ask(1,1,seg[u])
改成
res+=ask(1,seg[top[u]],seg[u])也可以过