Sample Input
3 2 3 1 2 1 3 1 2 3Sample Output
1 0 0
#include <iostream>
#include <string.h>
using namespace std;
int map[1000][1000]={0};
int copy_map[1000][1000]={0};
bool visit[1000];
bool need_to_check[1000];
void dfs(int n,int N)
{
for(int i = 1; i <= N; i++)
{
if(i != n && need_to_check[i] && copy_map[i][n] && !visit[i])
{
visit[i] = true;
dfs(i,N);
}
}
}
int main()
{
int N,M,K;
cin>>N>>M>>K;
for(int i = 1; i <= M; i++)
{
int s,e;
cin>>s>>e;
copy_map[s][e] = copy_map[e][s] = map[s][e] = map[e][s] = 1;
}
int city;
for(int i = 1; i <= K; i++)
{
memset(need_to_check, true, sizeof(need_to_check));
int count = 0;
cin>>city;
need_to_check[city] = false;
for(int j = 1; j <= N; j++)
{
copy_map[city][j] = copy_map[j][city] = 0;
}
for(int k = 1; k <= N; k++)
{
if(need_to_check[k] && !visit[k])
{
count++;
dfs(k,N);
}
}
if(count > 1)
{
cout<<count - 1<<endl;;
}
else
{
cout<<"0"<<endl;
}
for(int j = 1; j <= N; j++)
{
copy_map[city][j] = map[city][j];
copy_map[j][city] = map[j][city];
}
memset(visit,0,sizeof(visit));
}
}