算法题解—并查集—好朋友

好朋友(算法题解)

Description

有一个叫做“数码世界”奇异空间,在数码世界里生活着许许多多的数码宝贝,其中有些数码宝贝之间可能是好朋友,并且数码宝贝世界有两条不成文的规定:
第一,数码宝贝A和数码宝贝B是好朋友等价于数码宝贝B与数码宝贝A是好朋友
第二,如果数码宝贝A和数码宝贝C是好朋友,而数码宝贝B和数码宝贝C也是好朋友,那么A和B也是好朋友

现在给出这些数码宝贝中所有好朋友的信息问:可以把这些数码宝贝分成多少组,满足每组中的任意两个数码宝贝都是好朋友,而且任意两组之间的数码宝贝都不是好朋友

在这里插入图片描述

Input

输入的第一行有两个正整数n(n <= 100)和m(m <= 100),分别表示数码宝贝的个数和好朋友的组数,其中数码宝贝编号为1~n。

Output

输出一个整数,表示这些数码宝贝可以分成的组数

Sample Input

7 5
1 2
2 3
3 1
1 4
5 6

Sample Output

3

题解

dfs
这道题是在刷题的时候遇到的,一开始我的思路直接就是建图,然后dfs遍历,每一次遍历都会遍历整个连通分量,然后统计连通分量的个数即可。

并查集
后来发现这道题的普遍解法是并查集的做法,输入一个就找到祖先并且并入,最后统计祖先的个数即可找到相应有多少个连通分量

并查集代码

#include <iostream>
using namespace std;const int N = 110;
int f[N];//找到祖先并进行路径压缩 
int getFather(int v){if(f[v] == v) return v;f[v] = getFather(f[v]);return f[v];
}//合并 
void merge(int v,int u){int t1 = getFather(v);int t2 = getFather(u);if(t1 != t2){f[t2] = t1;}
}//初始化
void init(){for(int i = 0;i < N;i ++){f[i] = i;}
} int main()
{init();int n,m;cin >> n >> m;int v,u;while(m --){cin >> v >> u;merge(v,u);}int cnt = 0;for(int i = 1;i <= n;i ++)if(f[i] == i) cnt ++;cout << cnt << endl;return 0;
}

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

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

相关文章

关于搜索的题解

一、八皇后 Checker Challenge 假设有一张n*n表格&#xff0c;上面全是0代表空&#xff0c;然后我们一行一行的遍历&#xff0c;每一行放一个并做好标记 在标记的时候&#xff0c;实际上我们只需要标记三个方向&#xff0c;&#xff0c;左下&#xff0c;正下&#xff0c;右下&…

搜索练习题【题解】

VIJOS-P1026 毒药解药 DescriptionSample InputSample OutputHINTSourceSolution POJ3321Apple Tree DescriptionInputOutput Sample InputSample Output SourceSolution POJ3764The xor-longest Path DescriptionInputOutput Sample InputSample Output HintSolution VIJOS-P…

表格数据统计与分析

开发工具与关键技术&#xff1a;VS MVC 作者&#xff1a;李光辉 撰写时间&#xff1a;2019.6.8 今天要介绍的是layui表格数据的统计与分析&#xff0c;如下图所示&#xff0c;根据这边的表格数据通过计算得到右边的数据表格。首先我们需要对表格数据进行查询以及筛选&#x…

问卷与量表数据分析(SPSS+AMOS)学习笔记(三) : 数据分析工具,三线表的制作

课程链接&#xff1a;问卷与量表数据分析&#xff08;SPSSAMOS&#xff09; 目录 1. 数据分析工具的种类 2. SPSS窗口介绍 3. SPSS csv文件导入方式 4. SPSS输出为三线表 4.1 简单描述性统计过程 4.2 三线表软件配置 4.3 永久输出三线表格式 4.4 wordexcel 生成三线表…

问卷调查的数据如何分析?

一、模型框架 设计模型框架 一般在正式分析前&#xff0c;研究者常常需要构建模型框架&#xff0c;基于模型框架进行分析研究&#xff0c;例如数据分析、原理研究等等。那么如何构建基础的模型框架&#xff0c;以下以‘笔记本电脑购买意愿影响因素’来进行举例说明。 ​ 模型框…

网上赚钱竞争那么激烈你一定要有自己的绝活!

为何互联网赚钱的项目都存在红利这个说法呢&#xff1f;什么是红利期呢&#xff1f;就是大家都不知道的时候&#xff0c;我们称为红利期&#xff01;当大家都知道这件事情能赚钱那么就不能赚钱啦&#xff01; 其实现在互联网竞争激烈&#xff0c;这是众所周知的事情&#xff0…

申宝正规股票下周市场将迎来抛压

大盘在外围股市普遍上涨的带动下&#xff0c;两市大盘高开高走&#xff0c;盘中虽然振幅不大&#xff0c;沪市上下最大振幅只有16个点&#xff0c;但两市个股走势较比较活跃&#xff0c;盘面上&#xff0c;特高压、量子科技、电子烟、胎压测试、智能电网等板块涨幅靠前&#xf…

申宝策略-多只高位人气股尾盘炸板

三大指数均跌超1%多只高位人气股尾盘炸板&#xff0c;午后指数震荡走低&#xff0c;三大指数均扩大跌幅。盘面上&#xff0c;预制菜板块午后维持强势&#xff0c;国联水产20CM连续涨停&#xff0c;盖世食品涨超10%&#xff0c;华天酒店、金陵饭店、西安饮食、海欣食品、春雪食品…

申宝股票-A股再度跳水

早盘沪深两市分化明显&#xff0c;沪市冲高回落&#xff0c;深市震荡回调。但是相同点是小盘股表现强于权重股。市场热点围绕国防军工、软件、汽车、通讯、水泥建材等行业展开&#xff1b;病毒防治题材、电子烟概念展开调整。 午后&#xff0c;日经指数与恒生指数跌幅加深&…

【筹码分析】改版通达信PAVE筹码引力分析个股强势区和走势

指标公式描述 【筹码分析】改版通达信PAVE筹码引力分析个股强势区和走势 温馨提示&#xff1a;该指标特价&#xff0c;福利&#xff0c;大道至简&#xff0c;原生原理&#xff0c;容易理解&#xff0c;无培训辅导&#xff0c;见下图诊断分析个股。无选股公式。 指标作用&#x…

顶底突破同花顺副图指标 波浪类指标

我代码里面哪一个字是广告&#xff1f;&#xff1f;&#xff1f; 主力:ZIG(3,100/10),colorred,LINETHICK1; 分时2:ZIG(3,2),colorgreen,LINETHICK1; G:MA(主力,3),colorred; D:EMA(主力,34),colorgreen; J:EMA(主力,144),colorligreen; DRAWICON(CROSS(主力,G),主力-0.1,…

ChatGPT热潮席卷全球,会是企业数智化转型良机吗?

互联网沉默已久&#xff0c;ChatGPT的出现激起千层浪&#xff0c;沉寂已久的互联网迎来新一轮的机遇。毫不夸张地说&#xff0c;任何一家以技术见长的企业&#xff0c;人工智能绝对占有一席之地。 人工智能很强悍 ChatGPT可广泛应用于多种对话问答场景&#xff0c;包括智能客服…

大语模型前世今生

引言&#xff1a;席卷世界的大语言模型浪潮 2022年11月30日&#xff0c;OpenAI公司发布了ChatGPT。这迅速成为了社会各界关注的焦点&#xff0c;ChatGPT能够如此快速&#xff0c;准确的完成文本生成&#xff0c;信息抽取&#xff0c;机器翻译&#xff0c;甚至代码生成等复杂任务…

chatgpt赋能python:Python如何解方程——一名有10年Python编程经验工程师的解读

Python如何解方程——一名有10年Python编程经验工程师的解读 Python作为一种通用编程语言&#xff0c;具有强大的数学计算功能&#xff0c;因而被广泛应用于科学计算领域。对于一些需要求解方程的问题&#xff0c;Python也提供了简便的解决方法。本篇文章将介绍Python如何解方…

chatgpt赋能python:Python二次方程求解——一场简单的数学游戏

Python二次方程求解 —— 一场简单的数学游戏 作为一门广受欢迎的编程语言&#xff0c;Python 不仅仅在科学计算、数据分析、人工智能等方面被广泛应用&#xff0c;也被用于数学计算。本篇文章将介绍如何使用 Python 解决二次方程。 什么是二次方程&#xff1f; 一般情况下&…

chatgpt赋能Python-python_conjugate

Python Conjugate: 什么是共轭&#xff1f; 在数学中&#xff0c;共轭是指复数的一种操作。对于一个复数 a b i a bi abi&#xff0c;它的共轭为 a − b i a - bi a−bi。这个操作对于许多数学问题十分重要&#xff0c;因为它可以帮助我们解决求根、求导和求复函数值等问题…

chatgpt赋能python:Python中的非运算:理解not运算符的应用

Python中的非运算&#xff1a;理解not运算符的应用 在Python编程中&#xff0c;非运算(not)是一个常用的逻辑运算。它可以对一个表达式或变量进行逻辑反转。非运算符可以将True转换为False&#xff0c;将False转换为True&#xff0c;因此它在编程中十分重要。本文将介绍非运算…

chatgpt赋能python:Python怎么求解方程

Python怎么求解方程 在数学中&#xff0c;求解方程是一种基本的技能。Python作为一种广泛应用于科学计算和数据分析领域的编程语言&#xff0c;可以帮助我们求解各种类型的方程。Python提供了多个库和函数&#xff0c;使得求解方程在Python中变得非常轻松。 一元方程求解 一…

chatgpt赋能python:Python编程计算一元二次方程——最简单的方法实现

Python编程计算一元二次方程——最简单的方法实现 前言 Python编程语言是一种优秀的开源编程语言&#xff0c;具有易于学习、代码简洁明了、易于维护等优点&#xff0c;因此在近年来得到了广泛的应用。 本文将介绍如何使用Python编写一个简单而又实用的计算一元二次方程的程…

chatgpt赋能python:求一元二次方程Python程序--解题利器

求一元二次方程Python 程序 – 解题利器 一元二次方程是中学阶段数学必修内容&#xff0c;学生们需要掌握如何求解一元二次方程。在实际运用中&#xff0c;求解一元二次方程也经常被用到。今天我们将谈到使用 Python 编写一元二次方程程序。 什么是一元二次方程&#xff1f; …