图论基础知识 并查集/例题

并查集

学习记录自代码随想录

并查集可以解决的问题:

并查集常用来解决连通性问题。
判断两个元素是否在同一个集合里的时候,要想到用并查集。
并查集主要有两个功能:
1.将两个元素添加到一个集合中;
2.判断两个元素在不在同一个集合。

代码模板

int n = 1005;  // 节点数量大于题目要求一点即可
vector<int> father(n, 0);// 并查集初始化
void init(){for(int i = 0; i < n; i++){father[i] = i;}
}// 并查集寻根过程
int find(int u){return u == father[u] ? u : father[u] = find(father[u]);
}// 判断u和v是否是同一个根,同一个根则在同一个集合
bool isSameRoot(int u, int v){u = find(u);v = find(v);return u == v;
}// 将v-u这条边加入并查集
void join(int u, int v){u = find(u);v = find(v);// 同一个根则说明在同一个集合,不需要节点相连if(u == v) return;father[v] = u;
}

例题:20240410 Huawei机考

//2.相似图片分类
//小明想要处理一批图片,将相似的图片分类。他首先对图片的特征采样,得到图片之间的相似度,然后按照以下规则判断图片是否可以归为一类 :
//
//1)相似度 > 0表示两张图片相似,
//2)如果A和B相似,B和C相似,但A和C不相似。那么认为A和C间接相似,可以把ABC归为一类,但不计算AC的相似度
//3)如果A和所有其他图片都不相似,则A自己归为一类,相似度为0.
// 给定一个大小为NxN的矩阵M存储任意两张图片的相似度,
//M[i][j]即为第i个图片和第j个图片的相似度,请按照"从大到小”的顺序返回每个相似类中所有图片的相似度之和。
//
//解答要求
//时间限制 : C / C++ 1000ms, 其他语言 : 2000ms内存限制 : C / C++ 256MB, 其他语言 : 512MB
//
//输入
//第一行一个数N,代表矩阵M中有N个图片,下面跟着N行,每行有N列数据,空格分隔(为了显示整齐,空格可能为多个) 代表N个图片之间的相似度。
//约束:
//1.0 < N <= 900
//2.0 <= M[i][j] <= 100, 输入保证M[i][i] = 0, M[i][j] = M[j][i]
//输出
//每个相似类的相似度之和。格式为 : 一行数字,分隔符为1个空格。//样例
//
//输入
//5
//0 0 50 0 0
//0 0 0 25 0
//50 0 0 0 15
//0 25 0 0 0
//0 0 15 0 0
//输出
//65 25#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
#include <map>using namespace std;class Solution {
public:/*int n;Solution(int x) : n(x){}*/\// 初始化vector<int> init(vector<int>& father) {for (int i = 0; i < father.size(); i++) {father[i] = i;}return father;}// 查找根节点int find(int x, vector<int>& father) {return father[x] == x ? x : father[x] = find(father[x], father);}// 判断是否在一个集合中bool isSameRoot(int u, int v, vector<int>& father) {u = find(u, father);v = find(v, father);return u == v;}// 将u<----v边加入void join(int u, int v, vector<int>& father) {u = find(u, father);v = find(v, father);if (u == v) return;father[v] = u;}vector<int> getSimilarity(vector<vector<int>>& M, int N) {vector<int> father(N, 0);father = init(father);for (int i = 0; i < N; i++) {for (int j = i + 1; j < N; j++) {if (M[i][j] > 0) {join(i, j, father);}}}map<int, vector<int>> root_set;for (int i = 0; i < N; i++) {root_set[find(i, father)].push_back(i);}vector<int> res;for (const auto& it : root_set) {int cnt = 0;for (int i = 0; i < it.second.size(); i++) {for (int j = i + 1; j < it.second.size(); j++) {cnt += M[it.second[i]][it.second[j]];}}res.push_back(cnt);}return res;}
};int main() {int N;cin >> N; cin.ignore();int temp = N;vector<vector<int>> M;while (temp--) {string line;getline(cin, line);vector<int> nums;istringstream iss(line);string k;while (iss >> k) {nums.push_back(stoi(k));}M.push_back(nums);}Solution sol;vector<int> res = sol.getSimilarity(M, N);for (int i = 0; i < res.size() - 1; i++) {cout << res[i] << ' ';}cout << res[res.size() - 1];return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/3096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32H7使用FileX库BUG,SD卡挂载失败

问题描述&#xff1a; 使用STM32H7ThreadXFileX&#xff0c;之前使用swissbit牌的存储卡可正常使用&#xff0c;最近项目用了金士顿的存储卡&#xff0c;发现无法挂载文件系统。 原因分析&#xff1a; 调试过程发现&#xff0c;关闭D-Cache可以挂载使用exfat文件系统。 File…

QT5.12.12配置MSVC2017编译器环境

QT5.12.12配置MSVC2017编译器环境&#xff1a; &#xff08;失败&#xff0c;转成Mingw&#xff09; 编译器 目前的主流编译器应该是三种。GNU(Gcc,g), Clang/llvm和MSVC。来看一下GPT的回答。 GNU&#xff08;GCC&#xff09;: 优点&#xff1a;   跨平台支持&#xff1…

C# 扩展运算符(...)的详细解析

在C#编程中&#xff0c;扩展运算符&#xff08;…&#xff09;是一种非常有用的特性&#xff0c;它可以将一个数组或集合转换成一个可迭代的序列。扩展运算符在C# 7.0及以后的版本中引入&#xff0c;提供了一种简洁的方式来创建数组、列表或集合的实例&#xff0c;尤其是在需要…

一文看够,植物线粒体基因组分析套路

线粒体堪称生命活动的“能量供给站”&#xff0c;植物线粒体是线粒体基因组研究中难度最高的&#xff0c;其基因组大小差异较大&#xff0c;100kb-10Mb&#xff0c;大部分由非编码DNA序列组成&#xff0c;且有许多同源序列&#xff0c;占基因组总长的2%-60%&#xff0c;基因间区…

制作github.io学术个人主页

制作如图的学术个人主页。About me - Xianwen Ling’s Blog 学术个人主页是一个学者展示个人学术成果和研究方向的重要工具。个人主页可以集中展示学者的研究论文、出版物、演讲和发布的项目等学术成果&#xff0c;这样其他人可以更方便地了解和评估学者的研究贡献。个人主页可…

Maven 安装及配置教程(Windows)【安装】

文章目录 一、 下载1. 官网下载2. 其它渠道 二、 安装三、 配置四、 验证五、 本地仓储配置六、 配置镜像七、 配置JDK八、完整配置九、常用命令十、IDEA 中配置 Maven1. 配置当前项目2. 配置新建 / 新打开 项目 软件 / 环境安装及配置目录 一、 下载 1. 官网下载 安装地址&a…

书生·浦语大模型第二期实战营第七节-OpenCompass 大模型评测实战 笔记和作业

来源&#xff1a; 视频教程&#xff1a;https://www.bilibili.com/video/BV1Pm41127jU/?spm_id_from333.788&vd_sourcef4a51f7f5a63e756f73ad0dff318c1a3 文字教程&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/opencompass/readme.md 作业来源&#x…

【Hadoop】- MapReduce YARN 初体验[9]

目录 提交MapReduce程序至YARN运行 1、提交wordcount示例程序 1.1、先准备words.txt文件上传到hdfs&#xff0c;文件内容如下&#xff1a; 1.2、在hdfs中创建两个文件夹&#xff0c;分别为/input、/output 1.3、将创建好的words.txt文件上传到hdfs中/input 1.4、提交MapR…

HotSpot JVM 中的应用程序/动态类数据共享

0.前言 本文的目的是详细讨论 HotSpot JVM 自 JDK 1.5 以来提供的一项功能&#xff0c;该功能可以减少启动时间&#xff0c;但如果在多个 JVM 之间共享相同的类数据共享 (CDS) 存档&#xff0c;则还可以减少内存占用。 1.类数据共享 (CDS) CDS 的想法是使用特定格式将预处理…

状态模式和策略模式对比

状态模式和策略模式都是行为型设计模式&#xff0c;它们的主要目标都是将变化的行为封装起来&#xff0c;使得程序更加灵活和可维护。之所以将状态模式和策略模式进行比较&#xff0c;主要是因为两个设计模式的类图相似度较高。但是&#xff0c;从状态模式和策略模式的应用场景…

Pulsar Meetup 深圳 2024 会务介绍

“ Hi&#xff0c;各位热爱 Pulsar 的小伙伴们&#xff0c;Pulsar Meetup 深圳 2024 报名倒计时啦&#xff0c;快来报名。这里汇集了腾讯、华为和谙流科技等大量 Pulsar 大咖&#xff0c;干货多多&#xff0c;礼品多多&#xff0c;不容错过啊。 ” 活动介绍 由 AscentStream 谙…

Python 0基础_变现_38岁_day 16(文件操作)

在python&#xff0c;使用内置函数open()进行文件的一些读写操作 文件操作格式&#xff1a;open(文件路径&#xff0c;访问模式&#xff0c;字符编码) 前面两个参数是必备参数&#xff0c;后面的字符编码为选填&#xff0c;但是大多数情况下都会协商字符编码 访问模式 r 只读 w…

数码摄影色彩构成,数码相机色彩管理

一、资料描述 本套摄影色彩资料&#xff0c;大小58.54M&#xff0c;共有6个文件。 二、资料目录 《抽象彩色摄影集》.阿瑟.pdf 《色彩构成》.pdf 《色彩学》.星云.扫描版.pdf 《摄影色彩构成》.pdf 《数码相机色彩管理》.pdf 数码摄影进阶之4《色彩篇》.pdf 三、资料下…

解决IDEA中Tomcat控制台乱码问题(包括sout输出乱码)

文章目录 前言一、控制台直接输出乱码二、sout输出内容在控制台显示乱码 前言 今天在使用Tomcat的时候发现控制台输入出现了乱码问题&#xff0c;其实之前就出现过一次&#xff0c;解决了&#xff0c;但是新创建一个项目后又会出现sout的内容在控制台输出的乱码问题&#xff0…

Windows下Git的使用

目录 一、克隆远程仓库到本地二、git的三板斧2.1 add-将代码添加到本地仓库2.2 commit-提交代码到本地仓库2.3 push-推送本次添加操作到远程仓库2.4 gitee只有三板斧吗&#xff1f; 三、推送后没有出现绿点四、push到远程时报错五、git图形化界面下载链接 一、克隆远程仓库到本…

sql题目练习

cookie注入 解题思路和之前的整数型注入一样&#xff0c;只是比整数型注入多了一步&#xff0c;题目没有给输入框&#xff0c;提示“尝试找找cookie吧”cookie的中文翻译是曲奇&#xff0c;小甜饼的意思。cookie其实就是一些数据信息&#xff0c;类型为“小型文本文件”&#…

【CSS】CSS实现元素逐渐消失(实现元素透明逐渐消失/模糊)

mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 10%);mask-image 属性用于定义一个遮罩&#xff0c;它可以隐藏元素的一部分或全部内容。在这个示例中&#xff0c;我们使用 mask-image 属性来定义一个线性渐变的遮罩&#xff0c;使得列表项的内…

如何用微信发布考试成绩(如月考、期中、期末等)

自教育部《未成年人学校保护规定》颁布后,教育部明确表示:学校不得公开学生的考试成绩、排名等信息!同时学校应采取措施,便利家长知道学生的成绩等学业信息,对于教师来说,如何用微信发布考试成绩(如:月考、期中、期末等)就成了一道难题... 公开吧,会伤害到学生自尊心,甚至被投诉…

区块链 | OpenSea 相关论文:Toward Achieving Anonymous NFT Trading(三)

&#x1f951;原文&#xff1a; Toward Achieving Anonymous NFT Trading VII 讨论&#xff1a;关于匿名性与市场平台的困境 在本文的这一部分&#xff0c;我们将讨论关于隐藏 NFT 所有者地址的困境&#xff0c;以及为什么像 OpenSea 这样的 NFT 市场平台几乎必须得到完全的信…

C++ //练习 13.36 设计并实现对应的Folder类。此类应该保存一个指向Folder中包含的Message的set。

C Primer&#xff08;第5版&#xff09; 练习 13.36 练习 13.36 设计并实现对应的Folder类。此类应该保存一个指向Folder中包含的Message的set。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /****************************…