江苏省建设执业资格注册中心网站新的龙岗网站建设

张小明 2026/3/2 16:26:05
江苏省建设执业资格注册中心网站,新的龙岗网站建设,网站的默认首页,th7 wordpress主题一、并查集的原理 在一些应用问题中#xff0c;需要将n个不同的元素划分成一些不相交的集合#xff0c;开始时#xff0c;每个元素自成一个单元素集合#xff0c;然后按一定规律将同一组的元素集合合并。在此过程中要反复用到查询某个元素归属于哪个集合的运算#xff0c;…一、并查集的原理在一些应用问题中需要将n个不同的元素划分成一些不相交的集合开始时每个元素自成一个单元素集合然后按一定规律将同一组的元素集合合并。在此过程中要反复用到查询某个元素归属于哪个集合的运算适合于描述这类问题的抽象数据结构类型称为并查集union-find-set比如作者有大学同学高中同学初中同学他们彼此不认识。就会分为三个集合。按10人来算将其按编号分为0-9,分为不同的团体用数组来表示该树形关系数组中的非负数代表其父节点负数表示该结点为根结点且该树形有abs负数个结点。之后机缘巧合下大学同学和初中同学在一场聚会中认识了就将其合并为一个集合。通过以上例子可知并查集一般可解决以下问题1.查找元素属于哪一个集合2.查看两个元素是否属于同一个集合3.将两个集合归并为一个集合4.得到集合的个数二、并查集的实现1.这里我使用map存储名字和其对应vector的下标vector来存储其关系。class UnionFindSet{ public: UnionFindSet(int n) { v.reserve(n); } private: vectorint v; mapT,int m; };2.push实现去添加新元素void push(T name) { v.push_back(-1); m[name] v.size() - 1; } void push(const T name) { v.push_back(-1); m[name] v.size()-1; }这里实现右值引用和const左值引用两个版本3.给一个元素找见其元素所在集合的位置//给一个元素找见其元素所在集合的位置 int UnionFind(const T name) { if (m.count(name) 0) { return -1; } else { //通过循环遍历找见v[index]为负数的位置 //该index就为根节点的位置 int index m.find(name)-second; while (v[index] 0) { index v[index]; } return index; } }4.查找集合的个数//集合的个数 size_t Count()const { size_t count 0; for (int i 0; i v.size(); i) { if (v[i] 0) { count; } } return count; }5.查找两个元素是否为同一个集合并合并//合并两个元素为同一个集合 bool merge(const T name1, const T name2) { //查找两个元素是不是同一个集合 int x1 UnionFind(name1); int x2 UnionFind(name2); if (x1 x2) {//因为有相同的根节点所以为同一个集合 return false; } else { v[x1] v[x2];//将v[x2]存储的内容加在v[v1]上更新新集合的结点数量 v[x2] x1;//将v[x2]指向父节点 return true; } } //也可合并多个元素利用可变参数包 templateclass...Args void merge(const T name1, const T name2, Args... args) { merge(name1, name2); if constexpr (sizeof...(args) 0) {//constexpr可以在编译时检查防止传参出现问题 merge(name2, forwardArgs(args)...);//这里用完美转发去保持其右值属性不变。 } }三、并差集的应用1.省份数量https://leetcode.cn/problems/number-of-provinces/description/class Solution { public: int findCircleNum(vectorvectorint isConnected) { vectorint v; v.resize(isConnected.size(),-1); auto find[v](int index){//寻找根节点的数组下标 while(v[index]0){ indexv[index]; } return index; }; auto merge[v,find](int a,int b){//合并两个集合 int a1find(a); int b1find(b); if(a1!b1){ v[a1]v[b1]; v[b1]a1; } }; for(int i0;iisConnected.size();i){ for(int j0;jisConnected.size();j){ if(isConnected[i][j]1){//建立集合的关系 merge(i,j); } } } int count0; for(int i0;iv.size();i){ if(v[i]0){//判断“省份”的数量 count; } } return count; } };2.等式方程的可满足性https://leetcode.cn/problems/satisfiability-of-equality-equations/description/class Solution { public: bool equationsPossible(vectorstring equations) { vectorint v; v.resize(26,-1); auto find[v](int index){ while(v[index]0){ indexv[index]; } return index; }; auto merge[v,find](int x,int y){ int x1find(x); int y1find(y); if(x1!y1){ v[x1]v[y1]; v[y1]x1; } }; for(auto e:equations){ if(e[1]){//先将等于关系建立起来 merge(e[0]-a,e[3]-a); } } for(auto e:equations){ if(e[1]!){//判断两个不等的元素是否有相等关系 int xfind(e[0]-a); int yfind(e[3]-a); if(xy){//有就返回失败 return false; } } } return true;//遍历结束返回成功 } };
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

四川省建设厅消防网站网站公司哪家最专业

还在为游戏进度丢失而烦恼?或者想要探索游戏的隐藏内容却无从下手?今天我要为你介绍一个革命性的开源项目——HTML5存档编辑器,它能彻底改变你的游戏体验! 【免费下载链接】savegame-editors A compilation of console savegame e…

张小明 2026/1/22 8:36:51 网站建设

企业网站如何建设报告信阳建设网站哪家好

解锁视觉语言智能:Oscar多模态AI框架深度解析 【免费下载链接】Oscar Oscar and VinVL 项目地址: https://gitcode.com/gh_mirrors/os/Oscar 你是否曾经好奇,机器如何像人类一样理解图片中的内容并描述出来?当计算机看到一张"狗在…

张小明 2026/1/22 8:36:20 网站建设

做网站什么字体网络平台建设管理制度

Windows右键菜单管理大师:ContextMenuManager完全使用指南 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾经为Windows右键菜单的臃肿而烦恼…

张小明 2026/1/22 8:35:50 网站建设

国家工商网站查询化妆品 营销型网站

Liquor (动态编译后)就是 Java 原生运行,比一般的 JVM 脚本(或表达式)性能高 “20 倍” 左右 Liquor 是一个开源的轻量级 Java 动态编译器 Liquor Java 动态编译器。支持完整的 Java 语法及各版本特性编译特点&#x…

张小明 2026/1/22 8:35:19 网站建设

怎么防止网站被镜像可以上传图片的网站怎么做

安卓开发调试终极指南:一键搞定ADB工具和USB驱动安装 【免费下载链接】一键安装adb工具及googleusb调试驱动 本工具提供一键安装ADB工具及Google USB调试驱动的便捷方案,适合所有机型,操作简单,新手也能快速上手。下载后双击运行安…

张小明 2026/1/22 8:34:48 网站建设

网站关键词布局图seo教程合集

时频图程序(小波时频&#xff0c;短时傅里叶变换&#xff0c;s变换) MATLAB程序先搞个模拟信号热热身&#xff1a; fs 1000; % 采样率别太小气 t 0:1/fs:1; f1 20; f2 100; signal sin(2*pi*f1*t).*(t<0.5) sin(2*pi*f2*t).*(t>0.5); % 分段信号 noise 0.5*randn(…

张小明 2026/1/22 8:33:46 网站建设