当前位置: 首页 > wzjs >正文

北京外贸网站建设公司网站添加关键词

北京外贸网站建设公司,网站添加关键词,制作做动画的网站,wordpress免费主题下载并查集的核心思想 并查集主要由两个操作构成: Find:查找某个元素所在集合的根节点。并查集的特点是,每个元素都指向它自己的父节点,根节点的父节点指向它自己。查找过程中可以通过路径压缩来加速后续的查找操作,即将路…

并查集的核心思想

并查集主要由两个操作构成:

  • Find:查找某个元素所在集合的根节点。并查集的特点是,每个元素都指向它自己的父节点,根节点的父节点指向它自己。查找过程中可以通过路径压缩来加速后续的查找操作,即将路径上所有节点直接指向根节点。

  • Union:将两个集合合并。如果两个元素属于不同的集合,我们将它们的集合合并起来。为了提高效率,我们可以使用按秩合并(将树较矮的集合合并到树较高的集合下)。

问题描述

在这里插入图片描述

思路分析

在这个问题中,我们可以将每个人视为一个节点,朋友关系视为连通关系,判断两个人是否是朋友其实就是判断他们是否属于同一组。通过并查集,我们可以高效地实现这两种操作:合并操作(Union)和查找操作(Find)。

  1. 查找操作:对于一个给定的节点,我们需要找到它的根节点,也就是它所在集合的代表元素。通过路径压缩的技巧,我们能够在查找过程中将路径上的所有节点直接指向根节点,从而减少后续查询的时间复杂度。

  2. 合并操作:当两个节点属于不同的集合时,我们需要将它们合并为一个集合。为了保证合并操作的效率,我们使用了按秩合并的策略,即将树矮的集合合并到树高的集合下,这样可以尽可能减少树的高度,提高查询效率。

解决步骤

  1. 初始化:首先我们创建一个大小为 n+1 的数组 parent,用于存储每个节点的父节点。在初始化时,每个节点的父节点都指向自己,表示每个节点是独立的。

  2. 操作解析

    • 对于 op == 1 的操作,表示将两个节点 xy 连接成一个集合。我们通过调用 union(x, y) 来合并它们的集合。
    • 对于 op == 2 的操作,表示查询两个节点 xy 是否属于同一集合。我们通过调用 find(x)find(y) 来查询它们的根节点,如果根节点相同,则表示它们是朋友关系。
  3. 路径压缩与按秩合并

    • find 操作中,我们使用了路径压缩技术。每次查找时,我们都将路径上的所有节点直接指向根节点,这样可以有效减少查找时的时间复杂度。
    • union 操作中,我们使用按秩合并的策略,通过比较两个集合的大小,将较小的集合合并到较大的集合中,从而保证了合并操作的效率。

代码:

import java.util.Scanner;// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {private static int[] parent;public static void main(String[] args) {//思想:维护一个数组将每个元素的朋友记录在里面,一个查找函数,一个合并函数Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();parent = new int[n + 1];// 初始化,每个节点的父节点指向自己for (int i = 1; i <= n; i++) {parent[i] = i;}for (int i = 0; i < m; i++) {int op = sc.nextInt();int x = sc.nextInt();int y = sc.nextInt();if (op == 1) {union(x, y);} else {System.out.println(find(x) == find(y) ? "YES" : "NO");}}}// 路径压缩的查找public static int find(int i) {// 我们需要找到该元素的根节点,先假设当前元素为根节点,//这个函数用来查找根节点,而根节点的父节点等于他自己,parent[root]=rootif (i != parent[i]) {parent[i] = find(parent[i]);}return parent[i];}// 合并优化public static void union(int x, int y) {//将两个元素的父节,若是不同则需统一,统一不需要,由我们自定义谁成为父节点,一直按照这个规矩下去int rootx = find(x);int rooty = find(y);//如果父节点不同就需要操作,相同就不需要if (rooty != rootx) {parent[rooty] = rootx;}}
}

文章转载自:

http://Mvo5U9QK.mhfbf.cn
http://MFDjl6QO.mhfbf.cn
http://j4YEff1W.mhfbf.cn
http://9oUqFvJQ.mhfbf.cn
http://BmsbKDer.mhfbf.cn
http://TM2Njwex.mhfbf.cn
http://SsjSmSI5.mhfbf.cn
http://GD7QgFtP.mhfbf.cn
http://xtrMGAIA.mhfbf.cn
http://xt9mnmrM.mhfbf.cn
http://lzlEcItF.mhfbf.cn
http://5GOvZY9L.mhfbf.cn
http://gTVde5Io.mhfbf.cn
http://YHwf2pUN.mhfbf.cn
http://hQCsbbhA.mhfbf.cn
http://UAXto4E1.mhfbf.cn
http://oNJIFcv7.mhfbf.cn
http://nIm4jfzm.mhfbf.cn
http://zq1cJny2.mhfbf.cn
http://jFbvk0eJ.mhfbf.cn
http://pxdO6EY9.mhfbf.cn
http://PiusBVK9.mhfbf.cn
http://RBNjRrOf.mhfbf.cn
http://QepKsaGT.mhfbf.cn
http://j20VtrJh.mhfbf.cn
http://5mVNO8E1.mhfbf.cn
http://JARSfbsj.mhfbf.cn
http://pMSWaEMk.mhfbf.cn
http://sGa3DfUe.mhfbf.cn
http://eoHdrIdE.mhfbf.cn
http://www.dtcms.com/wzjs/773200.html

相关文章:

  • 重庆市住建厅网站网页开发工资多少
  • 门户网站代码怎么登陆wordpress后台
  • 佛山购物网站建设松江移动网站建设
  • 自助微信网站遂宁市城市建设档案馆网站
  • 网站建设公司现在还挣钱吗个人网站怎么做联盟推广
  • 网站开发培训机构需要多少钱东莞网站设计智能 乐云践新
  • 中国建设银行安徽分行网站python 做网站开发吗
  • 半江红网站建设赤峰建设业协会的官方网站
  • 水利建设管理司网站wordpress导出导入
  • vue做网站的实例手机网站一定要与pc网站一样
  • 网站建设实施步骤移动互联网开发前景
  • spa.net网站开发模板网生产线
  • 网站seo分析常用的工具是宁波网站优化软件
  • 网站优化怎样的微信头像定制软件
  • 如何做网站赚流量钱如何让百度收录网站
  • 天津seo公司网站站群管理系统
  • 投简历找工作哪个网站好推荐佛山顺德网站建设
  • 网站运营管理的内容有哪些个人网站制作多少钱
  • 网站建设有哪些岗位职责wordpress 数据表
  • 医院网站建设价格长沙网站建设联系电话
  • 网上购物网站网站建设分析秦皇岛建设局局官方网站
  • 中山快速做网站费用域名备案注销流程
  • 中文域名网站链接无法打开p2p借贷网站开发 论文
  • 网站服务器参数查询免费域名空间哪个好
  • 做g3云推广需要网站商家在携程旅游网站怎样做宣传
  • 汕头网站建设科技有限公司wordpress前台文章
  • 建网站费用记账开网店在线咨询
  • 做网站的企业广州公众号软文范例100
  • 广东网站建设公司电话教育网站建设的雷区
  • 做阿里网站的分录国际线上会议加密