\(d1(x,y) + d2(x,y) + d3(x,y)\)最大。

Solution:

前两棵树我们可以用构造虚树的方式来求\(d1(x,y) + d2(x,y)\)

记点对\((x,y)\)在第一棵树上的LCA是fa,那么\(dis_all(x,y) = dep1(x) + dep1(y) - dep1(fa) + dis2(x,y)\)

第二颗树考虑如何把第一棵树上的贡献粘贴上去,我们在每个点\(i\)连和\(i'\)连一条边权为\(dep1(i)\)的边,从下向上枚举\(LCA\)每次查询子树直径,合并时用一条边的两个端点合并。

而对于第三棵树,我们考虑边分治,首先要做的就是用多叉转二叉(左儿子右兄弟)来保证算法复杂度。

推荐倍增\(LCA\)

然后就是二叉树的树上\(Dsu\)

最终的时间复杂度\(O(n log n)\)

相关文章:

  • 2021-05-22
  • 2021-12-17
  • 2022-12-23
  • 2021-08-01
  • 2021-11-25
  • 2021-11-01
  • 2021-07-06
  • 2022-12-23
猜你喜欢
  • 2021-09-05
  • 2022-12-23
  • 2021-10-15
  • 2021-07-28
  • 2021-08-11
  • 2022-12-23
  • 2022-01-24
相关资源
相似解决方案