0%

2026牛客暑期多校 8——Problem F. Tree Shifts Her

题目大意

世界树的裂隙

时间限制:C/C++/Rust/Pascal 4 秒,其他语言 8 秒
空间限制:C/C++/Rust/Pascal 1024 MB,其他语言 2048 MB
Special Judge,64bit IO Format: %lld

在月球上,篝一直研究着一份浩繁的可能性集合。她用一种极度压缩的语言讲述自己的发现:寥寥数语所承载的信息,就足以压垮一个普通人的心智。

孝太郎不愿认输,一次次动用自己加速思维的能力去追赶她的讲解。这样的尝试失败了太多次,于是篝决定在继续讲下去之前,先测一测他的反应速度。当然,"把话说得简单些"从来不在她的选项之内。

这一次,篝取出了一棵有 nn 个顶点的世界树,顶点编号为 11 到 nn。这棵树是无向、无权的。

每次询问给出两个顶点 uu 和 vv。篝会暂时删去 uu 到 vv 的唯一简单路径上的所有边,此时世界树会分裂成若干个连通块,构成一个森林。

一个连通块的直径定义为其中任意两点之间距离的最大值,其中距离指两点间路径上的边数。特别地,只含一个顶点的连通块,其直径为 00。

对于每次询问,孝太郎需要求出所有连通块直径之和。

各次询问相互独立:每次询问结束后,所有被删去的边都会恢复原状,然后才进行下一次询问。特别地,若 u=vu = v,则该路径上不含任何边,世界树保持不变。

第一行包含两个整数 nn 和 qq(1≤n,q≤2⋅1051 \le n, q \le 2 \cdot 10^5)。

接下来 n−1n - 1 行,每行两个整数 aia_i 和 bib_i(1≤ai,bi≤n1 \le a_i, b_i \le n),表示顶点 aia_i 与 bib_i 之间有一条无向边。保证这些边构成一棵树。

接下来 qq 行,每行两个整数 uiu_i 和 viv_i(1≤ui,vi≤n1 \le u_i, v_i \le n),表示一次询问。

对于每次询问,输出一行一个整数,表示删去对应路径上的边之后,所有连通块的直径之和。

1
2
3
4
5
6
7
8
9
10
11
12
7 5
1 2
2 3
3 4
3 5
5 6
5 7
1 4
6 7
3 3
2 5
1 7
1
2
3
4
5
2
3
4
4
2

image

image

image

样例中的树形态如下:边集为 {(1,2),(2,3),(3,4),(3,5),(5,6),(5,7)}\{(1,2),(2,3),(3,4),(3,5),(5,6),(5,7)\}。

  • 询问 11:u=1,v=4u = 1, v = 4。 路径为 1→2→3→41 \to 2 \to 3 \to 4,删去边 (1,2),(2,3),(3,4)(1,2),(2,3),(3,4)。剩余连通块为 {1}\{1\}、{2}\{2\}、{4}\{4\}、{3,5,6,7}\{3,5,6,7\},直径分别为 0,0,0,20, 0, 0, 2,总和为 22。

  • 询问 22:u=6,v=7u = 6, v = 7。 路径为 6→5→76 \to 5 \to 7,删去边 (5,6),(5,7)(5,6),(5,7)。剩余连通块为 {6}\{6\}、{7}\{7\}、{1,2,3,4,5}\{1,2,3,4,5\},直径分别为 0,0,30, 0, 3(如 11 与 44 之间),总和为 33。

  • 询问 33:u=3,v=3u = 3, v = 3。 路径不含任何边,整棵树保持不变,其直径为 44(如 11 与 66 之间),总和为 44。

  • 询问 44:u=2,v=5u = 2, v = 5。 路径为 2→3→52 \to 3 \to 5,删去边 (2,3),(3,5)(2,3),(3,5)。剩余连通块为 {1,2}\{1,2\}、{3,4}\{3,4\}、{5,6,7}\{5,6,7\},直径分别为 1,1,21, 1, 2,总和为 44。

  • 询问 55:u=1,v=7u = 1, v = 7。 路径为 1→2→3→5→71 \to 2 \to 3 \to 5 \to 7,删去边 (1,2),(2,3),(3,5),(5,7)(1,2),(2,3),(3,5),(5,7)。剩余连通块为 {1}\{1\}、{2}\{2\}、{3,4}\{3,4\}、{5,6}\{5,6\}、{7}\{7\},直径分别为 0,0,1,1,00, 0, 1, 1, 0,总和为 22。

思路讲解

AC代码

心路历程(WA,TLE,MLE……)