https://www.patest.cn/contests/pat-a-practise/1013
代码来自http://blog.csdn.net/jtjy568805874/article/details/50791941
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct edge {
int x, y;
void read() { scanf("%d %d",&x,&y); }
}Edge;
int f[1001];
int find(int x) {
return x == f[x] ? x : f[x] = find(f[x]);
}
int main()
{
int n, m, k, c;
scanf("%d %d %d", &n, &m, &k);
vector<Edge> edges(m);
for (int i = 0; i < m; i++) edges[i].read();
while (k--) {
scanf("%d", &c);
for (int i = 0; i <= 1000; i++) f[i] = i;
int need = n - 2;
for (int i = 0; i < m && need >0; i++)
{
if (edges[i].x == c || edges[i].y == c) continue;
int fx = find(edges[i].x), fy = find(edges[i].y);
if (fx == fy) continue; else { f[fy] = fx; need--; }
}
printf("%d\n", max(need, 0));
}
return 0;
}