做法

按dfn序排好序后,
所有点到根距离-所有相邻两点lca到根距离为树链的并总长

sort(que+1,que+n+1,cmp);
for(i=1;i<=n;i++) res+=dis[que[i]];
for(i=1;i<=n;i++) res-=dis[LCA(que[i],que[i+1])];

简略证明

如图:
树链的并 学习笔记
dfn序为anc,x,y,z
求x,y,z树链的并:dis[anc]加3次减2次
求x,y,z,anc树链的并:dis[anc]加4次减3次(LCA(anc,x)=anc)

用途

可以树链的并求和
也可以树链的并修改
可以解决子树不同数问题

相关文章:

  • 2022-03-10
  • 2021-06-17
  • 2022-12-23
  • 2021-06-27
  • 2022-12-23
  • 2021-05-31
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-05-04
  • 2021-08-07
  • 2021-09-11
  • 2021-12-14
  • 2021-09-14
  • 2022-12-23
相关资源
相似解决方案