树上最长距离模板
板子题链接https://www.nowcoder.com/acm/contest/136/C
#include<bits/stdc++.h>
using namespace std;
struct edge
{
int v,nxt;
}e[2000000+10];
int head[1000000+10];
int ans=-1,n,tot,pos;
void dfs(int k,int fa,int d)
{
if(d>ans)
{
ans=d;
pos=k;
}
for(int i=head[k];i!=-1;i=e[i].nxt)
{
int x=e[i].v;
if(x==fa)
continue;
dfs(x,k,d+1);
}
}
int main()
{
#pragma comment(linker, "/STACK:102400000,102400000");
int n;
scanf("%d",&n);
for(int i=0;i<=n;i++)
head[i]=-1;
tot=0;
for(int i=1;i<n;i++)
{
int u,v;
scanf("%d %d",&u,&v);
edge tmp;
tmp.v=v;
tmp.nxt=head[u];
e[++tot]=tmp;
head[u]=tot;
tmp.v=u;
tmp.nxt=head[v];
e[++tot]=tmp;
head[v]=tot;
}
dfs(1,-1,0);
dfs(pos,-1,0);
cout<<ans+1<<endl;
}