bfs有环图的判重问题
#include<bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define endl '\n'
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int INF=0x3f3f3f3f,N=1e4+10;
vector<int>g[N];
int n,m,k;
bool st[N];
int dist[N];
void bfs(int s)
{
memset(st,0,sizeof st);
memset(dist,-1,sizeof dist);
queue<int>q;
q.push(s);
dist[s]=0;
st[s]=true;//
while(q.size())
{
auto t=q.front();
q.pop();
// if(st[t])continue;//错的
// st[t]=true;//存在奇数环的图在第一次访问的时候不标记 导致有一个点被访问两次
for(auto v:g[t])
{
if(st[v])continue;
//if(dist[v]!=-1)continue;//或者直接找第一次更新的即可
dist[v]=dist[t]+1;
q.push(v);
st[v]=true;
}
}
int mx=-1;
int res;
for(int i=1;i<=n;i++)
{
if(dist[i]>mx)
{
mx=dist[i];
res=i;
}
}
cout<<res<<endl;
}
void solve()
{
cin>>n>>m>>k;
while(m--)
{
int a,b;
cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
while(k--)
{
int s;
cin>>s;
if(!g[s].size())
{
cout<<0<<endl;
continue;
}
bfs(s);
// for(int i=1;i<=n;i++)
// {
// cout<<dist[i]<<" ";
// }
// cout<<endl;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int t=1;
while(t--)
{
solve();
}
return 0;
}