某计算机网络中存在 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 <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
vector<int>biao[50010];
int d[50010];
queue<int>q;
int bfs(int a)
{
q.push(a);
while(!q.empty())
{
int tmp = q.front();
q.pop();
int sz = biao[tmp].size();
for (int i = 0; i < sz; i++) {
if (d[biao[tmp][i]]==-1){
q.push(biao[tmp][i]);
d[biao[tmp][i]] = d[tmp] + 1;
}
}
}
return 0;
}
int main()
{
memset(d,-1,sizeof(d));
int n;
cin>>n;
int a,b;
for(int i=0;i<n-1;i++)
{
cin>>a>>b;
biao[b].push_back(a);
biao[a].push_back(b);
}
d[a]=0;
bfs(a);
int m=-99999999;
int v;
for(int i=1;i<=n;i++)
{
if(d[i]>m)
{ m=d[i];
v=i;
}
}
memset(d,-1,sizeof(d));
d[v]=0;
bfs(v);
int ans=-99999999;
for(int i=1;i<=n;i++)
{
if(d[i]>ans)ans=d[i];
}
cout << ans;
return 0;
}
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。