单链表式并查集应用

普通并查集(树状): p[i]p[i]p[i] 表示节点 iii 的父节点, iii 所在树的根节点是代表元素。

单链表式并查集(单链表状)时间复杂度 O(m元素值域+n)O(m_{元素值域}+n)O(m元素值域​+n) ,空间复杂度不同问题不一样。

  1. p[i]p[i]p[i] 表示 iii 在单链表形式并查集中的下一个节点。
  2. find(x)find(x)find(x) 表示从 xxx 向右找第一个没有被用到的/染色的元素

iii 所在树的根节点:表示从 iii 出发向右找,第一个没有被用到的位置。

初始化都是:

普通:fo(i,1,n)fa[i] = i;
单链表形式:fo(i,1,n+m)fa[i] = i;

1242. 修改数组


const int N=2e6+10,M=1e9+7;int n,m;
int a[N];
int fa[N]; //最坏情况,1e5个1e6值的元素,所以并查集开n+mint find(int x){//从x向右找第一个没有被用过的元素if(fa[x] == x){return fa[x];}return fa[x] = find(fa[x]);// return fa[x] = find(x+1); 这个肯定会 TLE
}
void solve(){cin>>n;fo(i,1,n)cin>>a[i]fo(i,1,N)fa[i] = i;/*我写的感觉就很啰嗦fo(i,1,n){int t = find(a[i]);if(t == a[i]){fa[a[i]] = find(a[i]+1);}else{a[i] = t;fa[t] = find(t+1);}}*/// y总写的超级简练fo(i,1,n){int t = find(a[i]);a[i] = t;fa[t] = t+1;}fo(i,1,n){cout<<a[i]<<" ";}
}int main(){solve();return 0;
}

3115. 疯狂的馒头


又学到了一个非常常用的TRICK。就是给定 MMM 次染色序列,问最后所有位置的颜色是什么。

如果从前向后考虑,后边的染色会覆盖之前的一种染色,可以倒着考虑,如果一段区间 已经 染色就不再被染色了 (每个位置只会被染色一次) ,然后跳过一些状态,进行优化。


这类题的想通的地方就是 只会出现一次,只会被染色一次

因为 fa[i]=ifa[i] = ifa[i]=i 表示这个节点 / 物品,还没有出现过,或者还没有被染色过。

int n,m,p,q;
int fa[1000010];
int a[1100000];
int ans[1100000];
int find(int x){// 找到从x开始的右边的第一个没有被染色的元素return fa[x] == x ? fa[x] : fa[x] = find(fa[x]);
}void solve(){cin>>n>>m>>p>>q;for(int i=1;i<=1000010;i++){fa[i] = i;}while(m){int l = (m*p+q)%n+1;int r = (m*q+p)%n+1;if(l>r)swap(l,r);// 【l,r】int x = find(l);while(x<=r){// [l,x]ans [x] = m;fa[x] = find(x+1);x = find(x);}m -- ; // 容易错}for(int i=1;i<=n;i++){cout<<ans[i]<<endl;}
}

单链表式并查集应用(解决区间合并,区间删除,染色问题)相关推荐

  1. 单链表式并查集应用举例

    给定一个长度为 N 的数组 A=[A1,A2,⋅⋅⋅AN],数组中有可能有重复出现的整数. 现在小明要按以下方法将其修改为没有重复整数的数组. 小明会依次修改 A2,A3,⋅⋅⋅,AN. 当修改 Ai ...

  2. 数据结构之单链表的增删查改等操作画图详解

    单链表 文章目录 单链表 链表的概念及其结构 概念 结构 链表的实现 开辟一个新结点 链表的销毁 打印链表 单链表的尾插 单链表的头插 单链表的头删 单链表的尾删 找到单链表中的一个结点 在pos位置 ...

  3. 数据结构,单链表讲解,并使用Java代码实现单链表增删改查【尾部添加,中间插入、修改节点、删除节点、展示链表】

    文章目录 单链表 什么是单链表,链式存储结构详解 链表的节点 头节点,头指针和首元节点 单链表的实现 1.尾部添加新节点 思路分析 代码实现 注意事项 2.按照编号插入新节点 思路分析 代码实现 注意 ...

  4. Java程序-单链表增删改查(实现对水浒人物的增删改查操作)

    单链表增删改查(实现对水浒人物的增删改查操作) 前言 一.链表(Linked List)介绍 二.应用实例 1.问题描述 2.代码实现 总结 前言 参考:B站,尚硅谷数据结构与算法 课程 一.链表(L ...

  5. 带头结点的单链表的初始化,建立,插入,查找,删除

    //带头结点的单链表的初始化,建立,插入,查找,删除     #include <stdio.h>     #include <stdlib.h> typedef int El ...

  6. 数据结构实验二——建立具有至少10个元素的顺序表或单链表,并能对该表进行查找、删除等基本操作。

    结合实际应用,建立具有至少10个元素的顺序表或单链表,并能对该表进行查找.删除等基本操作. //主函数 #include"Sq.h" #include<stdio.h> ...

  7. 数据结构----单链表增删改查

    单链表的增删改查 一.链表(Linked List) 链表是有序列表,以节点的方式来存储的,链式存储: 每个节点包含data域,next域:指向下一节点: 链表的各个节点不一定是连续存储: 链表分为带 ...

  8. 三、单链表增删改查原理和代码实现

    单链表 1.简单介绍 (1)单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素 ...

  9. 数据结构单链表SingleLinkedList,Java实现单链表增删改查

    文章目录 链表介绍 应用示例 链表介绍 链表是有序的列表,但是它在内存中是存储是不连续的,如下: 链表是以节点的方式来存储,是链式存储: ①每个节点包含data域存储数据,next域指向下一个节点 ② ...

最新文章

  1. 2.0-zabbix配置邮件告警
  2. TFTP 1.68智能刷机全能版发布,TTL线在CFE模式解决BCM5357如斐讯FIR302B等产品变砖问题
  3. windows7环境下使用pip安装MySQLdb
  4. Java静态变量与静态方法与成员变量成员方法的区别
  5. Ubuntu常用APT命令参数
  6. Horspool 字符串快速查找算法
  7. 谈论源码_当我们谈论软件“替代品”时,这是什么意思?
  8. 幽灵java进程引起的: FATAL ERROR in native method
  9. 095 issubclass和isinstance
  10. 《Java就业培训教程》_张孝祥_书内源码_05
  11. 支持linux的翻译软件,CentOS 6.4下安装翻译软件StarDict
  12. 第86节:Java中的JQuery基础
  13. QuickEdit-手机端强大的代码编辑器
  14. nltk.stem 词干提取(stemming)
  15. 球缺体积和球冠表面积的计算公式及应用
  16. CDN是什么?一分钟带你了解CDN
  17. 附PDF | 大麦网:内部画像建设三准则,今天都告诉你
  18. 淮阴工学院计算机网络题库,淮阴工学院计算机导论题库.doc
  19. python系列tkinter之pack布局、place布局和grid布局
  20. PDF文件如何另存为

热门文章

  1. python是最美的语言阅读答案_语文阅读题练习及答案:拯救世界上最美的语言
  2. c语言.jpg图片转成数组_良心推荐!4 款PDF转JPG图片的免费在线工具,让你早下班3小时!...
  3. 关于CAS的TGT和Service Ticket的过期策略
  4. 南通SEO看中国SEO之怪胎
  5. 插件进入显示:{“errcode“:40029,“errmsg“:“invalid code,hints:[req_id:rljdFLyWf-jkkUpa]“},无法体验,请修改后再提交审核(测试环境
  6. 京东高管解读财报:明年会提升毛利及净利 改善现金流
  7. Improved-DDPM
  8. 【转】PhotoShop 修改人物学习
  9. 支付宝三年投入30亿推进刷脸支付,靠脸吃饭的时代要来了?
  10. Linux下 (CentOS 7)有趣的命令