Gym - 101875L PC is for kicking【bfs】

大白(LN)發表於2020-10-02

參考大佬的部落格寫的很好https://blog.csdn.net/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);
}