问题已解决……
错误原因:原代码递归线段树时若 l==r 直接 return 了,便没有 Del 这个节点上的边。
应改成这样:```cpp
if (l==r)
{
for (int i=0;i!=Q[u].size();++i)
{
int x=Q[u][i].first,y=Q[u][i].second,w=0;
x=find(x,w); y=find(y,w);
printf("%d\n",query(d,w));
}
}
if (l<r)
{
int m=(l+r)>>1;
solve(u<<1,l,m,d+1); solve(u<<1|1,m+1,r,d+1);
}
for (int i=Del[u].size()-1;i>=0;--i)
{
int x=Del[u][i].first,y=Del[u][i].second;
fa[x]=x; W[x]=0; sz[y]-=sz[x];
}
```
by oxbby @ 2021-07-03 07:28:51