概念
在树上所有最短路径的最大值。
原理
这里介绍2种方法求树的直径。
两次DFS(BFS)法
我们任意从树上某个点出发,找到到它最远距离的点,然后再以这个点为起点,找到离这个点最远的点,这两点之间的距离即是树的直径。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+5;
int n,Max,p,dis[N];
ll ans;
int first[N],nex[N],to[N],w[N],tot;
void add(int x,int y,int z)
{
nex[++tot]=first[x];
first[x]=tot;
to[tot]=y;
w[tot]=z;
}
void dfs(int x,int fa)
{
for(int i=first[x];i;i=nex[i])
{
int y=to[i];
if(y==fa) continue;
dis[y]=dis[x]+w[i];
if(dis[y]>Max)
{
Max=dis[y];
p=y;
}
dfs(y,x);
}
}
int main()
{
scanf("%d",&n);

本文介绍了树的直径的概念,即树上所有最短路径的最大值。详细讲解了两种求解树的直径的方法:两次DFS(BFS)法和树形DP法,并提供了代码实现。在DFS法中,需要注意当边权为负时的特殊情况。对于更深入的理解,可以参考给出的例题和深入探讨部分。
最低0.47元/天 解锁文章
1582

被折叠的 条评论
为什么被折叠?



