当前位置: 首页 > 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.xdnf.cn/news/1364221.html

相关文章:

  • Linux系统编程——进程 | 线程
  • 直播美颜SDK技术解析:人脸美型功能的算法原理与实现方案
  • TCP与HTTP协议以及爬虫
  • 如何在Debian服务器上设置Node.js日志轮转
  • cs61a中的递归小例子
  • 创建高效MCP客户端:多服务器环境解决方案指南
  • 决策树原理与 Sklearn 实战
  • Hadoop MapReduce Task 设计源码分析
  • 【C++高并发内存池篇】ThreadCache 极速引擎:C++ 高并发内存池的纳秒级无锁革命!
  • 【目标跟踪】《FastTracker: Real-Time and Accurate Visual Tracking》论文阅读笔记
  • 论文阅读:Code as Policies: Language Model Programs for Embodied Control
  • uniapp中加载.urdf后缀的3D模型(three.js+urdf-loader)
  • 最新刀客IP地址信息查询系统源码_含API接口_首发
  • CAN总线详解(四)CANFD报文结构
  • 引脚电平异常?以下或许是原因
  • 十九、云原生分布式存储 CubeFS
  • dubbo源码之优雅关闭
  • 基于PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化
  • 使用Docker配置Redis Stack集群的步骤
  • Redis常规指令及跳表
  • 电子之路(一)酒店门锁主板-主板接线图和原理-东方仙盟
  • 8.25学习日志
  • Portswigger靶场之Blind SQL injection with conditional errorsPRACTITIONERLAB
  • 36 NoSQL 注入
  • 大模型微调 Prompt Tuning与P-Tuning 的区别?
  • Java多态大冒险:当动物们开始“造反”
  • leetcode-hot-100 (二分查找)
  • 实用电脑小工具分享,守护电脑隐私与提升效率21/64
  • LengthFieldBasedFrameDecoder 详细用法
  • excel 破解工作表密码