树上差分
树上差分
点: \(++sm_u,~++sm_v,~--sm_{lca},~--sm_{fa_{lca}}\)
边: \(++sm_u,~++sm_v,~sm_{lca}-=2\) , \(sm\) 记的是点和它父亲的连边
更新的时候:
inline void dfs2(int u)
{
int v;
for(int e = hd[u]; e; e = nt[e])
if((v = to[e]) ^ fa[u][0])
{
dfs2(v);
sm[u] += sm[v];
}
}

浙公网安备 33010602011771号