求助这两种我认为完全一样的写法的区别
查看原帖
求助这两种我认为完全一样的写法的区别
83353
XLao楼主2021/5/23 18:17

求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,1,seg[u])

改成 res+=ask(1,seg[top[u]],seg[u])res+=ask(1,seg[top[u]],seg[u])也可以过

2021/5/23 18:17
加载中...