#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
#define maxn 10000+10
vector <int> e[maxn];
int vis[maxn];
int n;
struct lala
{
int to,time;
};
int bfs(int gg)
{
queue <lala> q;
q.push((lala){gg,0});
while(!q.empty())
{
lala t=q.front();
q.pop();
if(vis[t.to]!=-1) continue;//这里为什么vis的初始化不是0而是-1,因为这里,为了避免起点再次出现
vis[t.to]=t.time;
for(int i=0;i<e[t.to].size();i++)
{
int h=e[t.to][i];
if(vis[h]==-1) q.push((lala){h,t.time+1});
}
}
int minn=vis[1],kk=1;
for(int i=2;i<=n;i++)//这样我们就可以取到相同距离,编号最小的
{
if(vis[i]>minn) {minn=vis[i];kk=i;}
}
if(minn==0)//还是0,因为起点的time是0嘛
kk=0;
return kk;
}
int main()
{
int m,k;
scanf("%d %d %d",&n,&m,&k);
for(int i=0;i<m;i++)
{
int from,to;
scanf("%d %d",&from,&to);
e[from].push_back(to);
e[to].push_back(from);
}
for(int i=0;i<k;i++)
{
int gg;
scanf("%d",&gg);
memset(vis,-1,sizeof(vis));
int hh=bfs(gg);
printf("%d\n",hh);
}
return 0;
}
喊山
最新推荐文章于 2021-03-24 10:05:56 发布