首页 > 其他分享 >并查集优化 - 按大小合并时间复杂度证明

并查集优化 - 按大小合并时间复杂度证明

时间:2023-07-29 10:44:05浏览次数:44  
标签:sz int 复杂度 查集 大小 集合 优化 size

并查集优化 - 按大小合并时间复杂度证明

if(sz[b[x]].size() > sz[b[y]].size()) swap(x, y);
  • 对于每个元素,当它当前所在的集合中,需要有其它大于该集合大小的集合,才会被遍历
  • 如果元素在一个大小 \(1\) 的集合中,会转移到大小 \(2\) 的集合中
  • 如果元素在一个大小 \(2\) 的集合中,会转移到大小 \(4\) 的集合中
  • 如果元素在一个大小 \(4\) 的集合中,会转移到大小 \(8\) 的集合中
  • 如果元素在一个大小 \(8\) 的集合中,会转移到大小 \(16\) 的集合中
  • 因为一开始就进行按秩合并所以每次转移到两倍大小的集合中
  • 所以每个元素转移 \(\log n\) 次
  • 那么总共 \(O(n \log n)\)

并查集暴力 AC

#include <bits/stdc++.h>
using namespace std;
using LL = long long;

const int MAXN = 4e6 + 3;
const LL mod = 998244353;

int n, m, b[MAXN];
LL ANS = 0;
vector<int> sz[MAXN];

int main(){
  ios::sync_with_stdio(0), cin.tie(0);
  cin >> n >> m;
  for(int i = 0; i < n; i++) sz[i].push_back(i), b[i] = i;
  for(int i = 1, opt, x, y; i <= m; i++){
    cin >> opt >> x >> y;
    if(opt == 0){
      if(b[x] == b[y]) continue;
      if(sz[b[x]].size() > sz[b[y]].size()) swap(x, y);
      for(int z : sz[b[x]]){
        sz[b[y]].push_back(z);
        b[z] = b[y];
      }
    }else{
      ANS *= 2, ANS += (b[x] == b[y]);
      ANS %= mod;
    }
  }
  cout << ANS;
  return 0;
}

标签:sz,int,复杂度,查集,大小,集合,优化,size
From: https://www.cnblogs.com/huangqixuan/p/17589400.html

相关文章

  • 【矩阵论】含hadamard积求导和优化问题
    本篇使用的符号说明,考虑优化问题\[\min\limits_X\|A\circX-B\|_F^2,\tag{1}\]其中\(A,X,B\inM_{m,n}\)。自然的想法是对其求导找闭式解,由于\(F\)-范数的平方可以看作对每个位置的平方求和,于是\((1)\)可以向量化写成以下形式,\[\min\limits_X\|\operatorname{vec}(A)\odot\o......
  • 并查集
    简述并查集其实是一个很有用的算法(至少我是这么认为的),很简单,代码也很好写,今天突然想写一下并查集。直接讲并查集不太好说,我们先看下面这一道题:洛谷P3367【模板】并查集【模板】并查集题目描述如题,现在有一个并查集,你需要完成合并和查询操作。输入格式第一行包含两个整数......
  • Android应用性能优化之分析工具
    Android应用性能优化之分析工具上一次记录了解决过度绘制的过程,这一次,想先弄清个概念性的东西,就是如何判断顺不顺畅?这东西其实最初我自己也觉得有点废话,用起来会卡就明显是不顺畅咯。但这东西就跟我很想吐槽很多应用一样,明明那么卡还放出来一样的道理。......
  • 广州网站建设:SEO优化如何让你的网站有更多的曝光度?
    你是否曾经为自己的网站无法获得足够的曝光度而苦恼?在如今竞争激烈的网络世界中,拥有一个令人印象深刻且受人欢迎的网站是至关重要的。而要实现这一目标,SEO(搜索引擎优化)的应用是不可或缺的利器。通过精心设计和执行SEO优化策略,你可以让你的网站脱颖而出,吸引更多的目标受众,从而获得更......
  • DWS轻量化更新黑科技:宽表加工优化
    本文分享自华为云社区《GaussDB(DWS)性能调优:宽表加工优化方案》,作者:譡里个檔。1.业务背景宽表加工性能慢,在Gauss(DWS)中可以使用DWS的轻量化更新的黑科技实现性能成倍提升2.原始逻辑事实表和维表关联之后插入目标表dm_cbg_ci_inv_dtl_w_fINSERTINTOdm_cbg_ci_inv_dtl_w_fS......
  • 智能RFID追溯系统优化空调装配效能
    智能RFID追溯系统优化空调装配效能空调作为现代家庭和工业建筑中必备的设备,其装配过程对生产效率和质量至关重要。传统的装配方式往往依赖于人工操作,存在一定的人为失误和效率低下的问题。而RFID技术的应用能够为空调装配带来一系列的优势。RFID技术概述RFID(RadioFrequencyIdenti......
  • Three.js使用InstancedMesh实现性能优化
    1.引言有这么一种场景:需要渲染一座桥,桥有很多桥柱,桥柱除了位置与倾斜角度不完全相同外,其他均相同,由于桥柱数量很大,使用three.js绘制较为卡顿,如何优化?注意,要求后续能选中某个桥柱2.概念2.1合并几何体three.js官方教程里提到,大量对象的优化-three.jsmanual(threejs.org),......
  • 策略模式+Spring配置类优化多if..else思路
    图示1.现状场景:假设设备上报不同类型的消息,我们要对不同类型的消息做不同的处理。如果我们通过if..else的方式处理的话会显得比较冗余。例如:if("alarmEvent".equals(msg)){//处理告警消息逻辑...}elseif("deviceBase".equals(msg)){//处理设备上报的基本......
  • mysql 代码适配 postgresql 适配改写,优化案例(行转列 + 标量子查询改写)
    最近在适配个MySQL应用的项目,各种SQL改成PG兼容的语法真的是脑壳痛,今天遇到个有意思的案例。原MySQLSQL语句:SELECTDISTINCTl.MALL_NAME'项目',t.CONT_NO'合同编号',t.COMPANY_NAME'租户',t.STORE_NOS'铺位号',(selectGROUP_CONCAT(r.FLOO......
  • C语言快速排序及其优化操作
    快速排序原理简述:找到每一轮最大(最小)的数,依次从左到右存入新的数组,就完成了降序(升序)的排列。#include<stdio.h>intmain(void){intn;scanf("%d",&n);inta[n],temp;for(inti=0;i<n;i++){scanf("%d",&a[i]);}for(......