参考大佬的博客写的很好https://blog.youkuaiyun.com/gtgym321/article/details/90145411
题目
Input
5 2
1 2
1 3
2 5
3 4
Output
4
题意:给出两个数n,m,下面是n-1行,每行有两个数表示连通,从m点开始走最多能走过几个点(不能重复)
思路bfs遍历
AC code
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<sstream>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
vector<int>s[120000];
int vis[120000],ans=0;
struct gg
{
int p,q;
}g;
queue<gg>que;
void bfs(int x)
{
memset(vis,0,sizeof(vis));
vis[x]=1;
g.p=x;
g.q=1;
que.push(g);
while(!que.empty())
{
que.pop();
ans=max(ans,g.q);
int f=g.p;
g.q++;
for(int i=0;i<s[f].size();i++)
if(!vis[s[f][i]])
{
vis[s[f][i]]=1;
g.p=s[f][i];
que.push(g);
}
g=que.front();
}
}
int main()
{
ios::sync_with_stdio(0);
int n,m,a,b;
cin>>n>>m;
for(int i=0;i<n-1;i++)
{
cin>>a>>b;
s[a].push_back(b);
s[b].push_back(a);
}
bfs(m);
printf("%d\n",ans);
}