问题描述
某计算机网络中存在 n 个路由,每个路由代表一个子网。路由之间有 n - 1 条互通关系,使得这 n 个网络之间任意两个网络都可以直接联通,或者通过其他网络间接连通。 为了测试组建的网路的性能,假设相邻的路由之间的数据传输需要一单位时间,现在需要知道任意两个路由之间传输数据最多需要多长时间。
输入格式
第一行一个整数 n(2≤n≤50000) 表示网络中路由个数。接下来 n - 1 行,每行输入 u,v(1≤u,v≤n) ,表示路由 u, v 相连。
输出格式
输出一行表示答案。
样例输入
8
6 3
3 7
3 4
7 5
5 1
6 8
5 2
样例输出
5
#include<bits/stdc++.h>
using namespace std;
const int MAX_N=50010;
struct edge{
int v,next;
}e[MAX_N*2];
int p[MAX_N],eid;
void init()
{
memset(p,-1,sizeof(p));
eid=0;
}
void insert(int u,int v)
{
e[eid].v=v;
e[eid].next=p[u];
p[u]=eid++;
}
int n;
int q[MAX_N],vst[MAX_N]={0},f[MAX_N]={0};
void bfs(int x)
{
memset(vst,0,sizeof(vst));
memset(f,0,sizeof(f));
int r=-1,l=0;
q[++r]=x;
f[x]=0;
vst[x]=1;
while(l<=r)
{
int u=q[l++];
//cout<<"u="<<u<<endl;
for(int i=p[u];i+1;i=e[i].next)
{
if(!vst[e[i].v])
{
//cout<<"whf"<<e[i].v<<endl;
vst[e[i].v]=1;
q[++r]=e[i].v;
f[e[i].v]=f[u]+1;
}
}
}
}
int main()
{
init();
cin>>n;
int u,v;
for(int i=1;i<n;i++)
{
cin>>u>>v;
insert(u,v);
insert(v,u);
}
bfs(1);
int maxx=-1,t;
for(int i=1;i<=n;i++)
{
//cout<<f[i]<<" ";
if(f[i]>maxx)
{
maxx=f[i];
t=i;
}
}
//cout<<endl;
bfs(t);
maxx=-1;
for(int i=1;i<=n;i++)
{
//cout<<f[i]<<" ";
if(f[i]>maxx)
{
maxx=f[i];
}
}
//cout<<endl;
cout<<maxx<<endl;
return 0;
}