【结论】【树上差分】

时间:2021-11-01 21:04:43

1、找出被所有路径都覆盖的边

在树中将所有路径起、始权值加1,起、始点的lca权值减2,从所有叶节点开始把权值往上累加。

最终权值为路径数的点到其父亲的边为所求边。

void dfs1(int s)
{
for(int t=fi1[s],y;t;t=la1[t])
{
y=en1[t];
dfs1(y);
j[s]+=j[y];
}
}

2、 将每条路径(s,t)上的每个点权值增加1,求各点权值

在树中将所有路径起、始权值加1,起、始点的lca权值减1,lca的父亲权值减1,从所有叶节点开始把权值往上累加。