首页 > 其他分享 >并查集

并查集

时间:2023-08-02 16:35:32浏览次数:35  
标签:pre fx int fy 查集 祖先 find

一般用于合并集合并查找集合

 1 int find(int x) {//查找x的祖先
 2     if (pre[x] == x)return x;
 3     return pre[x] = find(pre[x]);//压缩路径
 4 }
 5 void join(int x, int y) {
 6     int fx = find(x), fy = find(y);//查找这两个数的祖先
 7     if (fx != fy)pre[fx] = fy;
 8     //如果x和y的祖先不一样,那么将y的祖先变为x的祖先的祖先
 9     //简单来说就是将两个集合合并
10 }

 

标签:pre,fx,int,fy,查集,祖先,find
From: https://www.cnblogs.com/DLSQS-lkjh/p/17601029.html

相关文章

  • 闲置资源优化,轻松检查集群中的空闲成本
    作者:梁成昊(景祁)前言Kubernetes提供了对计算、网络、存储资源的抽象,提升了集群资源管理的效率。然而,由于用户不需要直接管理底层资源,可能导致部分闲置资源未及时发现,造成成本浪费。在企业IT成本治理过程中,如何发现并处理这部分资源,是成本优化的重要环节。为解决上述问题,阿里......
  • [并查集] 题单刷题摘要
    题单1.P6121[USACO16OPEN]ClosingtheFarmGP3144[USACO16OPEN]ClosingtheFarmS(逊版)思路\(\scr{Solution}\)每一时刻关闭农场,求是否全联通。也就是维护将单个集合分成多个集合。很容易想到爆搜算法,用vector邻接表建图,每次跑完图就将当前点的连边关系删去。复杂度......
  • luogu P3733 [HAOI2017] 八纵八横 题解【线段树分治+线性基+可撤销并查集+bitset】
    目录题目大意解题思路code题目大意题目链接给出一张\(n\)个点\(m\)条边的连通无向图,边带边权\(w_i\)。有以下三种操作,共\(q\)次:\(\centerdot\)在点\(x,y\)之间加入一条边权为\(w_i\)的边,如果这是第\(i\)个此种操作,则记这条新边为第\(i\)条。\(\centerdot\)将第\(k......
  • 并查集优化 - 按大小合并时间复杂度证明
    并查集优化-按大小合并时间复杂度证明if(sz[b[x]].size()>sz[b[y]].size())swap(x,y);对于每个元素,当它当前所在的集合中,需要有其它大于该集合大小的集合,才会被遍历如果元素在一个大小\(1\)的集合中,会转移到大小\(2\)的集合中如果元素在一个大小\(2\)的集合中,会......
  • 并查集
    简述并查集其实是一个很有用的算法(至少我是这么认为的),很简单,代码也很好写,今天突然想写一下并查集。直接讲并查集不太好说,我们先看下面这一道题:洛谷P3367【模板】并查集【模板】并查集题目描述如题,现在有一个并查集,你需要完成合并和查询操作。输入格式第一行包含两个整数......
  • 超市-并查集应用
    【超市】【问题描述】超市里有N件商品,每个商品都有利润pi和过期时间di,每天只能卖一件商品,过期商品(即当天di<=0)不能再卖。求合理安排每天卖的商品的情况下,可以得到的最大收益是多少。【输入格式】输入包含多组测试用例,测试用例最多30组。每组测试用例,以输入整数N开始,接下里输......
  • 并查集-讲课内容补全(未完
    施工中......先在这里给出我的并查集模板以下为比较常用的路径压缩intf[MAXN],n,m;voidclean(){for(inti=1;i<=n;i++)f[i]=i;}intfind(intx){if(x!=f[x])f[x]=find(f[x]);returnf[x];}voidadd(intx,inty){intfx=find(x),fy=find(y......
  • The Third Letter带权并查集
    Problem-1850H-Codeforces题意是给你a,b,c说明a在b后面c个单位(c<0就是在左边),每个位置只能有一个数,一共有n个位置,告诉你m个关系,问是否符合条件我们可以设置d[x]表示x到它的最早的父节点的距离,然后如果两个数父节点一样,那么c!=d[a]-d[b]时就说明不符合条件那么对于并查......
  • 算法刷题笔记--并查集的运用
    1、题目描述:一个城市中有两个犯罪团伙A和B,你需要帮助警察判断任意两起案件是否是同一个犯罪团伙所为,警察所获得的信息是有限的。假设现在有N起案件(N<=100000),编号为1到N,每起案件由团伙A或团伙B所为。你将按时间顺序获得M条信息(M<=100000),这些信息分为两类:D[a][b]其中[a]和[b]表示两......
  • 算法学习--并查集相关知识及例题
    一、并查集的定义二、基本操作1、初始化一开始,每个元素都是独立的集合#include<iostream>usingnamespacestd;constintmaxN=1000;intfather[maxN];intmain(){for(inti=1;i<=maxN;i++){father[i]=i;}return0;}2、查找递推版本://返......