树上差分

树上差分

点: \(++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];
		}
}
posted @ 2022-05-28 11:39  Faker_yu  阅读(33)  评论(0)    收藏  举报