树的直径
更新日志
2025/01/12:开工。
前言
你知道吗?树的直径有三种求法。
两遍DFS
先任意点DFS,在最远点再DFS,两次最远点就是直径两端。
树型DP-A
考虑对于每个点求出其向下的最长路径与次长路径(不同子树),其和就是经过该点且在其子树内的最长路径长度了。
所有节点取 \(\max\) 即可。
树型DP-B
对于每个点,储存其向下走的最长距离。
思路与A相同,但我们可以动态更新最长路径,并枚举可能的次长路径。代码可能更直观一点:
chmax(f[now],f[nxt]+mx+1);
chmax(mx,f[nxt]);

浙公网安备 33010602011771号