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

Reachability Query

题目分析

  • 该代码实现了一个动态集合管理系统,支持三种操作:合并集合、切换元素状态、查询集合中是否- 存在活跃元素。核心数据结构为并查集,结合状态标记数组和计数器。
  • 关键数据结构与函数

初始化

  • fa[N]:并查集父节点数组,初始时每个元素自成一集合。
  • cnt[N]:记录每个集合中活跃元素的数量。
  • f[N]:标记元素是否活跃(true表示活跃)。
  • 路径压缩:查找时直接指向根节点,优化后续查询效率。
  • 按大小合并:将较小集合的根指向较大集合的根,并累加活跃元素计数。
  • 动态更新元素活跃状态,并同步调整所属集合的计数器。

操作处理流程

  • 合并集合(op=1)
  • 输入两个元素u和v,合并其所属集合。
  • 切换状态(op=2)
  • 输入元素u,反转其活跃状态并更新集合计数器。
  • 查询集合(op=3)
  • 输入元素u,检查其所属集合是否存在活跃元素(cnt[find(u)] > 0)。

复杂度分析

  • 时间复杂度:单次find操作接近O(α(n))O(\alpha(n))O(α(n))(反阿克曼函数),整体操作复杂度为O(q⋅α(n))O(q \cdot \alpha(n))O(qα(n))
  • 空间复杂度:O(n)O(n)O(n),用于存储父节点、计数器和状态数组。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,q,fa[N],cnt[N];
bool f[N];
int find(int x)
{return (x==fa[x]?x:fa[x]=find(fa[x]));
}
void merge(int x,int y)
{x=find(x),y=find(y);if(x!=y) fa[x]=y,cnt[y]+=cnt[x];
}
void change(int x)
{int fx=find(x);if(f[x]) cnt[fx]--;else cnt[fx]++;f[x]=!f[x];
}
signed main()
{ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);cin>>n>>q;for(int i=1;i<=n;i++) fa[i]=i;int op,u,v;while(q--){cin>>op;if(op==1){cin>>u>>v;merge(u,v);}else if(op==2){cin>>u;change(u);}else{cin>>u;if(cnt[find(u)]) cout<<"Yes"<<'\n';else cout<<"No"<<'\n';}}return 0;
}
http://www.dtcms.com/a/349807.html

相关文章:

  • 算法每日一题 | 入门-分支结构-肥胖问题
  • 【modbus学习】野火Modbus主机接收到数据后的完整函数调用流程
  • Ajax笔记(上)
  • Vue3在一个对象的list中,找出update_date最大的一条数据
  • MCP 协议原理与系统架构详解—从 Server 配置到 Client 应用
  • vscode--快捷键
  • ESP8266学习
  • 嵌入式开发学习———Linux环境下网络编程学习(六)
  • 驾驭 Glide 的引擎:深度解析 Module 与集成之道
  • 音视频学习(五十六):单RTP包模式和FU-A分片模式
  • ESP32开发WSL_VSCODE环境搭建
  • *解决 Visual Studio 编译时的字符编码问题
  • 41_基于深度学习的小麦病害检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 服务器(Linux)新账户搭建Pytorch深度学习环境
  • Linux(从入门到精通)
  • Wisdom SSH 核心功能定位与 sudo 权限配置指南
  • 四层Nginx代理日志配置
  • 2024年Engineering SCI2区,面向工程管理的无人机巡检路径与调度,深度解析+性能实测
  • Vue 2 中的 v-model和Vue3中的v-model
  • 设计模式:原型模式(Prototype Pattern)
  • 使用 HandlerMethodReturnValueHandler 在SpringBoot项目 实现 RESTful API 返回值自动封装,简化开发
  • 数据结构青铜到王者第三话---ArrayList与顺序表(2)
  • 零知开源——基于STM32F103RBT6和ADXL335实现SG90舵机姿态控制系统
  • three.js+WebGL踩坑经验合集(9.1):polygonOffsetUnits工作原理大揭秘
  • 【数据结构】LeetCode160.相交链表 138.随即链表复制 牛客——链表回文问题
  • [SC]SystemC动态进程概述及案例
  • LinkedIn 自动消息发送工具
  • 网络编程——TCP、UDP
  • 人工智能(AI)与网络安全
  • 【Linux】协议的本质