#include <iostream>
#include <list>
#include <cstring>
#include <cstdio>
using namespace std;
#define N 1001
int root(int n, int p[]) {
int i = n;
while(p[i] != i)
i = p[i];
return i;
}
int main(int argc, char **argv) {
bool adj[N][N] = {{false}};
int n, m, k, lost;
int p[N];
scanf("%d%d%d", &n, &m, &k);
for(int i = 0; i < m; i ++) {
int c1, c2;
scanf("%d%d", &c1, &c2);
adj[c1][c2] = true;
adj[c2][c1] = true;
}
for(int i = 0; i < k; i ++) {
scanf("%d", &lost);
for(int j = 1; j <= n; j ++)
p[j] = j;
for(int r = 1; r <= n; r ++) {
if(r != lost) {
for(int c = r; c <= n; c ++) {
if(c != lost && adj[r][c]) {
int root1 = root(r, p);
int root2 = root(c, p);
if(root1 != root2) {
p[root2] = root1;
}
}
}
}
}
int count = 0;
for(int j = 1; j <= n; j ++) {
if(j != lost && p[j] == j)
count ++;
}
cout << count-1 << endl;
}
return 0;
}
1013. Battle Over Cities (25) (Disjoint Set)
最新推荐文章于 2021-01-12 11:06:11 发布