点分治向下递归的代码是这样的
void solve(int r)
{
vis[r]=1;
work(r);
for(int i=head[r];i!=-1;i=a[i].next)
{
int v=a[i].to;
if(vis[v]) continue;
now_si=si[v];root=0;bal[root]=1000000;
weight_root(r,v);
solve(root);
}
}
这里面上一次搜索中 v 不一定是 r 的儿子,所以递归此分支时 now_si=si[v] 是不是可能会导致复杂度错误?