概念
在树上所有最短路径的最大值。
原理
这里介绍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);
for<