思路:BFS求连通图的个数就可以啦~
#include <bits/stdc++.h>
using namespace std;
vector<int> v[1010];
bool visited[1010];
int city,cnt;
void BFS(int n)
{
visited[n]=true;
for(int i=0;i<v[n].size();i++)
{
if(!visited[v[n][i]])
BFS(v[n][i]);
}
}
int main(void)
{
int N,M,K;
scanf("%d%d%d",&N,&M,&K);
for(int i=0;i<M;i++)
{
int a,b;
scanf("%d%d",&a,&b);
v[a].push_back(b);
v[b].push_back(a);
}
for(int i=0;i<K;i++)
{
scanf("%d",&city);
cnt=-1;
memset(visited,false,sizeof(visited));
visited[city]=true;
for(int j=1;j<=N;j++)
{
if(!visited[j])
{
cnt++;
BFS(j);
}
}
printf("%d",cnt);
if(i!=K-1) printf("\n");
}
}