首页 > 其他分享 >【蓝桥杯 2019 省 A】修改数组【并查集】

【蓝桥杯 2019 省 A】修改数组【并查集】

时间:2023-05-29 15:46:17浏览次数:43  
标签:10 fa int 查集 long 蓝桥 leq 2019

链接

https://www.luogu.com.cn/problem/P8686

题意

给你 \(n\) 个数 a[1...n],从 \(a_2\) 开始,如果和之前的某个数具有相等的值,就一直让 \(a_i = a_i + 1\),直到前面的任何一个数都和它不相等

\(1 \leq n \leq 10^5\), \(1 \leq a_i \leq 10^6\)

问最后的序列是什么

思路

暴力做法是循环,对于每个 \(a_i\),让它每次加一

估算一下,暴力会超时

怎样优化呢?

把每次前移看成一种关系,前驱结点是祖先(父亲),最容易想到的应该是路径压缩,缩短前移的路径,使得不用每次一个个前移。
(虽然并查集描述的是集合的关系,但是本质上还是一棵树,这就是并查集的本质呀,没想到学了这么多年并查集,还没有想到这个点上)

用 fa[x]存储x所在的集合里,最小的没有出现过的数,对于每个 \(a_i\),输出ans = fa[f(a[i])],然后令 fa[ans] = ans + 1

代码

#include<bits/stdc++.h>
#define ull unsigned long long
#define ll long long
using namespace std;
const int N = 2e6 + 10;
int n, m, fa[N], sz[N];
int a[N];

inline int f(int x) {
    return (x == fa[x] ? x : (fa[x] = f(fa[x])));
}

int main() {
    ios::sync_with_stdio(false);
    cin >> n;
    for(int i = 1; i <= 1e6; i++) fa[i] = i;
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
        cout << fa[f(a[i])] << ' ';
        fa[fa[f(a[i])]] = fa[f(a[i])] + 1;
    }
    cout << '\n';
    return 0;
}

标签:10,fa,int,查集,long,蓝桥,leq,2019
From: https://www.cnblogs.com/re0acm/p/17440609.html

相关文章

  • WPS2019集美大学版v11.8.6.11825
    软件介绍WPSOffice2019增强版(wps集美大学专用版)是一款由大学教育机构定制的WPS企业版,wps2019政府版拥有正版授权,免激活可以长期使用.金山Office办公软件最新wps2019专业增强版wps2019永久激活版下载.软件截图版本特点WPS2019集美大学专用版:免激活、去水印、永久授权、......
  • Vivado2019.2下载(官网&百度云)与安装(手把手)
    龙芯杯对于vivado版本的要求:VivadoDesignSuiteHLWebPACK™版是革命性设计套件的免费版本。我们用它,能满足龙芯杯的需要,而且不用license区别如下:下载地址记得创建xilinx账号或者登陆!!!第一个是指下载一个exe之后,点击这个exe进行在线安装第二个是指把20几G的软件全部下到本地......
  • vivado2019.2新建工程点灯
    官方视频教程地址但是看b站的黑金视频更快些最后是靠这个教程点出来的new一个工程点next设置工程名字和路径,注意不要有中文和空格选择创建RTL工程点灯不需要添加外部的ip等文件,所以不用选,直接next先不加约束,点next用的是依元素公司的EES303开发板,芯片型号是XC7A35T-1CSG324C......
  • 蓝桥杯----2022国C
    《斐波那契与7》写的时候第一次尝试了暴力,跑了一个小时多都没有跑完查了一下,大概1s可以跑1e8条指令如果真要跑的话 202202011200,应该跑到比赛结束应该内跑完(希望电脑不会炸) 暴力还是不合理的,遇到这种情况试一下循环节对于斐波那契数列Fn=Fn-1+Fn-2所......
  • 【蓝桥杯集训·每日一题】AcWing 4309. 消灭老鼠
    写在前面本人CSDN博客主页:这里一、题目1、原题链接4309.消灭老鼠2、题目描述约翰的农场可以看作一个二维平面。农场中有n个老鼠,在毁坏着农田。第i个老鼠的位置坐标为(xi,yi)。不同老鼠可能位于同一位置。在(x0,y0)处,装有一个双向发射的激光枪,该位置没有老鼠。激光枪每次发......
  • 【蓝桥杯集训·每日一题】AcWing 3625. 幂次方
    写在前面本人CSDN博客主页:这里一、题目1、原题链接3625.幂次方2、题目描述对任意正整数N,计算XNmod233333的值。输入格式共一行,两个整数X和N。输出格式共一行,一个整数,表示XNmod233333的值。数据范围1≤X,N≤109输入样例:25输出样例:32二、解题报告1、思路分析(1)快速幂模板题......
  • 2019字节笔试
     机器人跳跃问题机器人正在玩一个古老的基于DOS的游戏。游戏中有N+1座建筑——从0到N编号,从左到右排列。编号为0的建筑高度为0个单位,编号为i的建筑的高度为H(i)个单位。  起初,机器人在编号为0的建筑处。每一步,它跳到下一个(右边)建筑。假设机器人在第k个建筑,且它现在的能......
  • vivado2019.2对modelsim2019.2编译库全报错解析
    最近在用vivado2019.2编译modelsim2019.2库时,所有库全部报错,查阅了博主们的各种解决办法,最终在一篇文章的评论中找到了解决办法,特此记录问题描述:1、ERROR:[Vivado12-5602]compile_simlibfailedtocompileformodelsimwitherrorinxxxlibraries2、ERROR:[Common17-......
  • ciscn_2019_n_1
    ciscn_2019_n_1题目分析这题的主要溢出点在于gets(v1),但是这题有两种思路,第一种方法是通过gets函数溢出修改变量v2的值,使v2能够通过if判断语句,执行system函数,第二种方法还是通过gets(v1)溢出,不过这次是通过libc来实现,将ebp覆盖为system函数的地址第一种方法通过学习栈的工作原理,可......
  • C++文件流结构体序列化,并查集,LRU缓存
    c语言中的文件操作中用fprintf将数据写入到文件中,用fscanf将文件读入内存中,而c++中也有ostream和istream作为键盘流输入,屏幕流输出,对于文件也有ofstream/istream来进行相关的操作.如图:图中表示将一个结构体的的数据输入到文件中,并从文件中读取数据,并用得到的数据初始化一......