计蒜客习题:网络延时


问题描述

某计算机网络中存在 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


AC代码

#include 
#include 
#include 
#include 
#include 
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;i1;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;
 } 

你可能感兴趣的:(算法竞赛刷题,#,图论,计蒜客NOIP习题)