首页 > 其他分享 >模板-并查集DSU

模板-并查集DSU

时间:2024-10-16 12:32:01浏览次数:6  
标签:std 查集 int void DSU fa contain leader 模板

版本1:路径压缩。

struct DSU {
	std::vector<int> fa;
	void init(int n) {
		fa.resize(n + 1);
		std::iota(fa.begin(), fa.end(), 0);
	}
	int leader(int x) {
		while (x != fa[x]) {
			fa[x] = leader(fa[x]);
		}
		return fa[x];
	}
	void join(int x, int y) {
		x = leader(x);
		y = leader(y);
		if (x != y) {
			fa[y] = x;
		}
	}
};

版本2:启发式合并。

struct DSU {
	std::vector<int> fa, sz;
	void init(int n) {
		fa.resize(n + 1);
		std::iota(fa.begin(), fa.end(), 0);
		sz.assign(n + 1, 1);
	}
	int leader(int x) {
		while (x != fa[x]) {
			x = fa[x];
		}
		return x;
	}
	void join(int x, int y) {
		x = leader(x);
		y = leader(y);
		if (x != y) {
			if (sz[x] < sz[y]) {
				std::swap(x, y);
			}
			sz[x] += sz[y];
			fa[y] = x;
		}
	}
};

版本3:用map保存对应关系,适用于标识不是int的场景。

template<typename TYPE>
struct DSU {
	std::map<TYPE,TYPE> fa;
	std::map<TYPE,std::set<TYPE>> contain;
	void add(TYPE x) {
		fa[x] = x;
		contain[x].insert(x);
	}
	void join(TYPE x, TYPE y) {
		x = leader(x);
		y = leader(y);
		if (x != y) {
			if (contain[x].size() < contain[y].size()) {
				std::swap(x, y);
			}
			contain[x].insert(contain[y].begin(), contain[y].end());
			fa[y] = x;
		}
	}
	TYPE leader(TYPE x) {
		return x == fa[x] ? x : fa[x] = get(fa[x]);
	}
};

标签:std,查集,int,void,DSU,fa,contain,leader,模板
From: https://www.cnblogs.com/chenfy27/p/18469648

相关文章

  • 网站修改怎么进入后台?织梦网站模板修改地图?
    1.备份现有模板备份目的:防止修改过程中出现错误导致数据丢失。操作方法:复制模板文件夹到另一个位置。2.修改HTML结构修改内容:根据需求调整页面布局或元素。示例:添加导航栏、侧边栏等。3.修改CSS样式修改内容:调整页面的颜色、字体、布局等样式。示例:为导航栏添......
  • 网站后台的用户名修改?dw怎样修改网站模板?
    修改网站后台的用户名登录后台管理系统:打开浏览器,输入后台管理系统的地址。使用当前的用户名和密码登录。进入用户管理页面:导航到“用户管理”或“账户设置”等相关选项。选择要修改的用户:在用户列表中找到需要修改的用户名。编辑用户信息:点击“编辑”或......
  • 网站从后台怎么修改内容?怎么修改网站模板的内容?
    要从后台修改网站内容或模板,通常需要访问网站的管理界面或使用特定的开发工具。以下是两种常见方法的步骤:修改网站内容登录后台管理系统:通过浏览器访问网站的后台管理地址。输入管理员账号和密码进行登录。导航到内容管理:在后台管理界面中找到“内容管理”、“文章管......
  • 如何修改公司网站导航?帝国网站模板怎么修改?
    要修改公司网站的导航,特别是使用帝国网站模板的情况下,可以按照以下步骤进行:登录后台管理:打开浏览器,输入你的网站后台管理地址。输入用户名和密码登录。进入导航管理:登录后,找到“导航管理”或类似名称的选项。这通常位于“系统设置”、“模板管理”或“网站配置”下。......
  • 公司网站网页修改?网站模板主页修改?
    网站网页修改确定修改需求:明确需要修改的内容,如文本、图片等。备份现有文件:在修改前备份当前网页文件,以防万一。编辑HTML/CSS:打开需要修改的HTML文件。根据需求修改文本、图片路径等。测试修改效果:在本地或测试服务器上预览修改后的网页,确保一切正常。上线发布:将修改后......
  • 修改网站模板?公司网站修改文字?
    要修改公司网站的模板或文字,你可以按照以下步骤操作:访问网站后台:登录到你的网站管理后台,通常是在域名后面加上 /admin 或 /wp-admin 等路径。选择页面编辑:在后台管理界面找到需要修改的文字或模板所在的页面。编辑页面内容:如果是修改文字,直接在页面编辑器中......
  • 帝国cms网站模板修改详细教程?
    1.环境准备备份数据:在进行任何修改前,确保对现有网站的数据和文件进行完整备份。环境熟悉:了解帝国CMS的基本结构,包括模板文件的位置和命名规则。2.模板文件定位模板目录:通常模板文件位于./e/template/目录下,不同的主题可能有不同的子目录。模板文件类型:主要包括HTML模板......
  • 后台怎么修改网站文字?网站有了模板怎么修改?
    要修改网站的文字内容,通常有几种方法,具体取决于你的网站是如何构建和管理的。以下是一些常见的方法:使用内容管理系统(CMS):如果你的网站是基于WordPress、Joomla或Drupal等CMS构建的,你可以通过登录到后台管理系统来修改文字。进入“页面”或“文章”管理区域,找到需要编辑的内容......
  • 修改动态网站模板?ab模板修改网站地址?
    要修改动态网站模板,通常涉及以下几个步骤:备份现有模板:在进行任何更改之前,确保备份当前正在使用的模板文件,以防修改过程中出现问题。cp-r/path/to/template/path/to/backup确定需要修改的部分:明确哪些部分需要调整,比如样式、布局或功能等。编辑模板文件:如果是......
  • php模板网站怎么修改?网站模板二次修改程序?
    要对PHP模板网站进行二次开发或修改,你可以遵循以下步骤来进行:熟悉模板结构首先,详细阅读模板提供的文档。理解模板文件夹结构,通常包括HTML/CSS/JS文件以及PHP后端逻辑。备份现有代码在任何修改之前,确保完整备份当前网站的所有文件和数据库。这一步对于防止意外丢失数......