直径

法一:先求出一条直径,显然只有这条直径上的边才可能是答案

我们考虑最终答案怎么来的,我们把树看成这个样子

其中中间红色的是我们找出来的直径

那么其他直径只有可能是从分支开始走,然后到红色线上面走一段,最后再走到另一分支上(注意直径的端点都是叶子节点)

我们把所有直径都画出来,每次都取交集,然后就可以发现最终的答案一定是连续的一段

于是我们就枚举寻找左右端点,可看这篇题解,写的比较清楚

法二:

对一条边\((u,v)\)(假设\(u\)\(v\)的父亲),如果这条边是某一条直径要经过的,那么一定满足\(v\)往其子树走到的最远距离加上\(u\)不往\(v\)的子树走而走到的最远距离加上这条边的长度等于直径(所以要记录一个点往子树走的最远距离以及次远距离,还要用换根DP);而且还要记录每个值走的方法,并且对每个满足条件的点利用乘法原理统计,最后统计出的最大值就是直径条数

法三:这篇题解,看不懂

update 2024.5.26

其实法一利用“树网的核”的结论很容易做。把中点画出来,树就长成这个样子了

所以左右两边的离中点最近的拐点之间的边就是必经边了

posted @ 2024-02-08 17:51  最爱丁珰  阅读(3)  评论(0编辑  收藏  举报