原题链接:A1013 Battle Over Cities
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include <ctime>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
using namespace std;
const int MAX = 1010;
int N, M, K, city1, city2, invade;
bool Graph[MAX][MAX] = {{0}};
void DFS(bool G[][MAX], bool visited[], int v)
{
visited[v] = 1;
for(int i=1; i<=N; i++)
{
if(!visited[i] && G[v][i])
{
visited[i] = 1;
DFS(G, visited, i);
}
}
}
int DFSTraverse(int v)
{
bool G[MAX][MAX];
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++)
G[i][j] = Graph[i][j];
for(int i=1; i<=N; i++)
G[v][i] = G[i][v] = 0;
int cnt = 0;
bool visited[MAX] = {0};
for(int i=1; i<=N; i++)
{
if(!visited[i])
{
DFS(G, visited, i);
cnt++;
}
}
return cnt;
}
int main()
{
scanf("%d %d %d", &N, &M, &K);
for(int i=0; i<M; i++)
{
scanf("%d %d", &city1, &city2);
Graph[city1][city2] = 1;
Graph[city2][city1] = 1;
}
for(int i=0; i<K; i++)
{
scanf("%d", &invade);
printf("%d\n", DFSTraverse(invade)-2);
}
return 0;
}