计蒜客习题:网络延时
题目
样例
思路
邻接表,求树的直径问题,常规两个BFS。
代码
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
vector<int> mp[50010];
int dist[50010];
queue<int> q;
int bfs(int a)
{
q.push(a);
while(!q.empty())
{
int t=q.front();
q.pop();
for(int i=0;i<mp[t].size();i++)
if(dist[mp[t][i]]==-1)
{
q.push(mp[t][i]);
dist[mp[t][i]]=dist[t]+1;
}
}
return 0;
}
int main()
{
int n;
cin>>n;
int a,b;
for(int i=1;i<n;i++)
{
cin>>a>>b;
mp[b].push_back(a);
mp[a].push_back(b);
}
memset(dist,-1,sizeof(dist));
dist[1]=0;
bfs(1);
int mx=0,pos;
for(int i=1;i<=n;i++)
{
if(dist[i]>mx)
{
mx=dist[i];
pos=i;
}
}
memset(dist,-1,sizeof(dist));
dist[pos]=0;
bfs(pos);
int ans=0;
for(int i=1;i<=n;i++)
ans=max(ans,dist[i]);
cout<<ans;
return 0;
}