#include<iostream> #include<cstdio> #include<queue> #include<algorithm> #include<queue> #include<list> #include<cstring> #include<stack> using namespace std; const int N = 100001; int v[N], r[N], a[N], f[N], t[N], tt, h[N], record[N],fa[N],number; int n, m; int find(int b) { if (fa[b] == b) return b; fa[b] = find(fa[b]); return fa[b]; } void bing(int v, int w) { int vv = find(v), ww = find(w); if (vv != ww) { fa[vv] = ww; number--; } } int main() { while (scanf("%d%d", &n,&m) != EOF) { number = n; memset(h, 0, sizeof(h)); for (int i = 0; i <= n; i++) fa[i] = i; for (int i = 0; i < m; i++) scanf("%d%d", &f[i], &t[i]); scanf("%d", &tt); for (int i = 0; i < tt; i++) scanf("%d", &a[i]); for (int i = 0; i < tt; i++) h[a[i]-1] = 1; for (int i = 0; i < m;i++) if (!h[i]) bing(f[i], t[i]); for (int i = tt - 1; i >= 0; i--) { record[i] = number; bing(f[a[i]-1], t[a[i]-1]); } for (int i = 0; i < tt; i++) printf("%d%c", record[i], " \n"[i == tt - 1]); } return 0; }
CSU 1601(并查集)
最新推荐文章于 2018-03-30 19:57:59 发布