解题思路:就每来一个山头,就用一次bfs。这道题感觉过于简单了。
#include<cstdio>
#include<cstring>
#include<set>
#include<iterator>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
vector<int> s[10001];
int vis[10001];
int st;
queue<int> q;
void bfs()
{
int u;
while(!q.empty()) q.pop();
q.push(st);
vis[st]=1;
while(!q.empty())
{
u=q.front();
q.pop();
for(int i=0;i<s[u].size();i++)
{
int v=s[u][i];
if(!vis[v])
{
vis[v]=vis[u]+1;
q.push(v);
}
}
}
}
int main()
{
int n,m,k,u,v;
//freopen("t.txt","r",stdin);
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++) s[i].clear();
while(m--)
{
scanf("%d%d",&u,&v);
s[u].push_back(v);
s[v].push_back(u);
}
while(k--)
{
scanf("%d",&st);
memset(vis,0,sizeof(vis));
bfs();
int ans=0,r;
for(int i=1;i<=n;i++)
{
if(vis[i]>ans)
{
r=i;ans=vis[i];
}
}
if(r!=st)
printf("%d\n",r);
else
printf("0\n");
}
return 0;
}