#include<bits/stdc++.h>
using namespace std;
#define MAXN 40005
#define int long long
int n, m, k, cnt;
vector<int> G[MAXN];
int fa[MAXN], vis[MAXN], X[MAXN], Y[MAXN], bro[MAXN], ans[MAXN];
void init() {
	for(int i = 0; i < n; i++) {
		fa[i] = i;
	}
}
int find(int x) {
	return x == fa[x] ? x : find(fa[x]);
}
void merge(int x, int y) {
	cout << x << ' ' << y <<'\n';
	x = find(x);
	y = find(y);
	if(x == y) return ;
	fa[x] = y;
	cnt--;
}
signed main() {
	cin >> n >> m;
	init();
	for(int i = 1; i <= m; i++) {
		cin >> X[i] >> Y[i];
		G[X[i]].emplace_back(Y[i]);
		G[Y[i]].emplace_back(X[i]);
	}
	cin >> k;
	cnt = n - k;
	for(int i = 1; i <= k; i++) {
		cin >> bro[i];
		vis[bro[i]] = 1;
	}
	cout << '\n';
	for(int i = 0; i < n; i++) {
		if(!vis[i]) {
			for(auto c : G[i]) {
				if(!vis[c]) {
					merge(i, c);
				}
			}
		}
	}
	cout << cnt << '\n';
	for(int i = k; i >= 1; i--) {
		ans[i] = cnt;
		vis[bro[i]] = 0;
		for(auto c : G[bro[i]]) {
			if(!vis[c]) {
				merge(bro[i], c);
				cout << cnt << '\n';
			}
		}
	}
	cout << '\n';
	for(int i = 1; i <= k; i++) {
		cout << ans[i] << '\n';
	}
	return 0;
}

2 comments

  • @ 2024-4-3 21:39:46

    广告

    象棋中国文化的特色之一,受到各年龄段的人们喜爱,不仅​玩法独特​,还极考验智慧

    《中国象棋(pwm制作)》是由 Mօjang AB 公司 开发的一款象棋游戏,不仅可以​双人玩​,还可以与好友联机

    点我进入《中国象棋(pwm制作)》主页=

    Mօjang AB 开发的《你的mc打怪记》,是一个 mc 版的打怪小游戏,欢迎大家游玩

    在末影龙统治的世界里,你要击败末影龙,拯救人类,成为新的统治者

    点我进入《你的mc打怪记》主页

    • @ 2024-2-29 17:04:47

      更新:

      #include<bits/stdc++.h>
      using namespace std;
      #define MAXN 400005
      #define int long long
      int n, m, k, cnt;
      vector<int> G[MAXN];
      int fa[MAXN], vis[MAXN], X[MAXN], Y[MAXN], bro[MAXN], ans[MAXN];
      void init() {
      	for(int i = 0; i < n; i++) {
      		fa[i] = i;
      	}
      }
      int find(int x) {
      	return x == fa[x] ? x : find(fa[x]);
      }
      void merge(int x, int y) {
      	//cout << x << ' ' << y <<'\n';
      	x = find(x);
      	y = find(y);
      	if(x == y) return ;
      	fa[x] = y;
      	cnt--;
      }
      signed main() {
      	ios::sync_with_stdio(false);
      	cin.tie(0), cout.tie(0); 
      	cin >> n >> m;
      	init();
      	for(int i = 1; i <= m; i++) {
      		cin >> X[i] >> Y[i];
      		G[X[i]].emplace_back(Y[i]);
      		G[Y[i]].emplace_back(X[i]);
      	}
      	cin >> k;
      	cnt = n - k;
      	for(int i = 1; i <= k; i++) {
      		cin >> bro[i];
      		vis[bro[i]] = 1;
      	}
      	//cout << '\n';
      	for(int i = 0; i < n; i++) {
      		if(!vis[i]) {
      			for(auto c : G[i]) {
      				if(!vis[c]) {
      					merge(i, c);
      				}
      			}
      		}
      	}
      	//cout << "-------" << cnt << '\n';
      	for(int i = k; i >= 1; i--) {
      		ans[i] = cnt;
      		vis[bro[i]] = 0;
      		for(auto c : G[bro[i]]) {
      			if(!vis[c]) {
      				merge(bro[i], c);
      				//cout << cnt << '\n';
      			}
      		}
      		cnt++;
      	}
      	//cout << '\n';
      	ans[0] = cnt;
      	for(int i = 0; i <= k; i++) {
      		cout << ans[i] << '\n';
      	}
      	return 0;
      }
      
      • 1

      Information

      ID
      197
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      4
      Tags
      # Submissions
      17
      Accepted
      4
      Uploaded By