题意给出一个 $n(\le 2\times 10^5)$ 点的树。从 $C$ 出发,先到 $A$ 和 $B$ 中较近的点,然后到另一个点。求可能的路径最大值。题解$A\rightarrow B$ 这段路径是肯定要走的,然后还有一段 $\max_c (\min (AC,BC))$ 。显然 $AB$ 是直径,然后从 $A,B$ 出发分别 $\text{dfs}$ 一次求出距离即可。#includ...
题意给出一棵 $n(\le 10^5)$ 个点的树,要求选连续的 $k$ 个点,使得其它城市到这些点距离的最大值最小。题解可以发现树的中心一定要选,然后中心的周围再选 $k-1$ 个点。先求出直径,然后找到中心。再以中心为根,找到所有节点到叶节点的距离 $res[i]$ 并从大到小排序,然后选前 $k$ 个节点即可。可以证明这些节点一定是连续的。#include<bits/stdc++...
双倍经验:洛谷2195 HXY造公园题意给出一个有 $n(\le 3\times 10^5)$ 个点 $m(\le 3\times 10^5)$ 条边的森林。要求支持两种操作:求 $x$ 所在树的直径将 $x,y$ 所在的树合并,要求合并后树的直径最小题解合并可以用并查集来实现,用 $ans[x]$ 表示 $x$ 子树中的直径长度。对于操作 $1$ ,直接输出 $ans[x]$ 。对于操作 ...
题意求所有在树上直径的节点。点数 $N\le 200000$ 。题解我百度谷歌搜了一圈硬是没看到一个像样的题解,去提交记录里面看代码读懂的方法。先跑第一遍 $dfs$ ,记录以 $x$ 为根的子树中深度的最大值 $mx[x]$ 和次大值 $mx2[x]$ ,两者相加再 $+1$ 即为这个子树的直径。然后再跑一遍,对于每个节点 $x$ ,遍历所有子节点 $y$ ,并对子节点向上最大深度 $up...