并查集进阶版

在这里插入图片描述
在这里插入图片描述
过关代码如下

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#include<unordered_set>
using namespace std;

int n, m;
vector<int> edg[400005];
int a[400005], be[400005]; // a的作用就是存放要摧毁
int k;
int fa[400005];
int daan[400005];

void add(int x, int y) {
	edg[x].push_back(y);
	edg[y].push_back(x);
}

int find(int x) {
	if (x == fa[x]) return x;
	return fa[x] = find(fa[x]);
}

void uni(int x, int y) {
	int xx = find(x), yy = find(y);
	if (xx == yy) return;
	fa[xx] = yy;
}

int main() {
	cin >> n >> m;
	int l, r;
	for (int i = 1; i <= m; i++) {
		cin >> l >> r;
		add(l, r); // 建立边
	}
	cin >> k;
	for (int i = 1; i <= k; i++) {
		cin >> a[i];
		be[a[i]] = 1; // 标记为1,表示被摧毁
	}
	int ans = n-k; // 一开始的时候每个点都是一个块
	// 初始化并查集
	for (int i = 0; i <= n; i++) fa[i] = i;
	// 开始区分联通分量
	for (int i = 0; i < n; i++) {
		if (be[i]) continue;
		for (int u : edg[i]) {
			if (be[u]) continue;
			if (find(i) == find(u)) continue;
			uni(i, u);// 连接
			ans--;
		}
	}
	daan[k+1] = ans;
	for (int i = k; i >= 1; i--) {
		//cout << "yes" << endl;
		int xiufu = a[i];
		ans++;
		be[xiufu] = 0;  // 恢复为1
		for (int u : edg[xiufu]) {
			if (be[u]) continue;
			if (find(u) == find(xiufu)) continue;
			ans--;
			uni(u, xiufu);
		}
		daan[i] = ans;
	}
	for (int i = 1; i <= k+1; i++) {
		cout << daan[i] << endl;
	}
	//cout << " now";
	return 0;
}

相关推荐

  1. 【C++】

    2024-06-09 04:50:01       55 阅读
  2. 笔记

    2024-06-09 04:50:01       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-09 04:50:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-09 04:50:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-09 04:50:01       82 阅读
  4. Python语言-面向对象

    2024-06-09 04:50:01       91 阅读

热门阅读

  1. 啥是多边央行数字货币桥项目(个人技术理解)

    2024-06-09 04:50:01       23 阅读
  2. Python自学(适用于略有基础)

    2024-06-09 04:50:01       23 阅读
  3. 各种源码文件的扩展名

    2024-06-09 04:50:01       22 阅读
  4. C语言——函数指针

    2024-06-09 04:50:01       35 阅读
  5. Android ViewPager和ViewPager2的区别

    2024-06-09 04:50:01       24 阅读
  6. 使用vue3+ts封装一个Slider滑块组件

    2024-06-09 04:50:01       24 阅读
  7. 标题:CSRFTester:自动化探测 CSRF 漏洞的利器

    2024-06-09 04:50:01       29 阅读
  8. 开发服务器——webpack-dev-server

    2024-06-09 04:50:01       25 阅读
  9. MySQL8sql_model的问题

    2024-06-09 04:50:01       29 阅读