数据结构(二)

news2024/11/25 2:43:08

目录

Trie树

并查集


Trie树

作用:用来高效地存储和查找字符串集合的数据结构

基本形式:

 模板代码如下:

#include<iostream>
using namespace std;

const int N = 100010;

//idx代表当前用到哪个下标
//既是根节点,又是空节点
//cnt存储的是以当前点结尾的单词有多少
int son[N][26],cnt[N],idx;

//插入
void insert(char str[])
{
    int p = 0;
    for(int i = 0;str[i];i++)
    {
        int u = str[i] - 'a';
        if(!son[p][u]) son[p][u] = ++idx;
        p = son[p][u];
    }
    cnt[p] ++;
}

//查询
int query(char str[])
{
    int p = 0;
    for(int i  = 0;str[i];i++)
    {
        int u  = str[i] - 'a';
        if(!son[p][u]) return 0;
        p = son[p][u];
    }
    return cnt[p];
}

并查集

1、将两个集合合并

2、询问两个元素是否在一个集合当中

基本原理:

用树的形式来维护集合。树根的编号就是整个集合的编号。每个节点存储它的父节点,p[x]表示x的父节点。

#include<iostream>
using namespace std;

const int N = 100010;

//father数组
int p[N];
int n,m;

//返回x的祖宗节点
int find(int x)
{
    if(p[x] != x) p[x] = find(p[x]);
    return p[x];
}


int main()
{
    scanf("%d%d",&n,&m);
    for(int i = 0;i<=n;i++) p[i] = i;

    while(m--)
    {
        char op[2];
        int a,b;
        scanf("%s%d%d",op,&a,&b);
        if(op[0] == 'M') p[find(a)] = find(b); //将b的祖宗节点接到a的祖宗节点的下方
        else
        {
            if(find(a) == find(b)) puts("Yes");
            else{
                puts("No");
            }
        }
    }
    return 0;
}

下面操作默认坐标为1开始

  • 插入一个数 heap[++size] = x;up(size)
  • 求集合中最小值 heap[1]
  • 删除最小值 heap[1] = heap[size]; size--;down(1);
  • 删除任意第k个元素 heap[k] = heap[size];size--; down(k);up(k);
  • 修改任意一个元素 heap[k] = x;dwon(k);up(k);

 

#include<iostream>
using namespace std;

const int N = 100010;

int n,m;
int h[N],size;

//down操作
void down(int u)
{
    int t = u;
    if(2*u <= size && h[2*u] < h[t]) t = 2*u;
    if(2*u +1 <= size && h[2*u +1] < h[t]) t = 2*u+1;
    if(u != t)
    {
        swap(h[u],h[t]);
        down(t);
    }
}

//up操作
void up(int u)
{
    while(u/2 && h[u/2] > h[u])
    {
        swap(h[u/2],h[u]);
        u /=2;
    }
}

int main()
{
    scanf("%d",&n);
    for(int i =0;i<=n;i++) scanf("%d",&h[i]);
    size = n;
    
    for(int i = n/2;i;i--) down(i);
    
    while(m--)
    {
        printf("%d",h[1]);
        //删掉堆顶
        h[1] = h[size];
        size --;
        down(1);
    }
    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Springboot集成Activiti工作流引擎-引入、调用,测试【基础讲解】

工作流 通过计算机对业务流程自动化执行管理 他主要解决的是使在多个参与者之间按照某种“预定义规则”自动进行传递稳定 信息或任务的过程 通俗来讲 业务上一个玩着的审批流程 比如请假&#xff0c;出差 外出采购等 工作流引擎就是来解决流程问题的 提高我们的工作效率 如果…

day43-Spring_IOC

0目录 1.2.3 1. Spring_IOC 1.1 定义&#xff1a;轻量级框架&#xff0c;java EE的春天&#xff0c;主流框架 1.2 Spring特性&#xff1a;IOC控制反转&#xff1b;AOP面相切面 1.3 组成部分&#xff1a;Spring在SSM中所起到的作用&#xff08;SpringMVC和Mybatis框架的黏…

Mybatis-Plus插入数据返回主键两种方式(注解或XML)

废话不多说&#xff0c;直接撸代码: <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace&qu…

如何在Windows上恢复已删除的文件?

大多数人在无意中删除了一些重要文件后无法恢复。这些文件被暂时删除&#xff0c;直到我们清空回收站才会消失。你可以通过右键单击回收站中的文件并选择还原选项来轻松恢复这些文件。但是&#xff0c;如果你清理回收站删除了文件怎么办&#xff1f;或者不小心使用Shift Delet…

“玩趣味游戏 学交通规则”—九彩乡未成年人教育实践活动

为进一步提高未成年人道路交通安全与文明出行意识&#xff0c;有效防范道路交通事故发生&#xff0c;2023年7月21日上午&#xff0c;在海原县民政局、海原县未成年人救助保护中心、九彩乡未成年人保护工作站的支持指导下&#xff0c;海原县知行社会工作发展中心、九彩乡红十字志…

Java中静态模板文件freemaker使用

Java中静态模板文件freemarker使用 使用背景使用流程1. 引入依赖2. 配置3. 创建模板文件4. 运行代码 使用背景 FreeMarker 是一款 模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c; 并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&…

Softing工业将亮相2023上海国际工博展

Softing工业将亮相2023年上海国际工业博览会 ——碳循新工业 数聚新经济 “中国国际工业博览会”作为广受瞩目的专业展之一&#xff0c;全面展示了生产、过程自动化的最新技术和全面解决方案、电气系统、工业IT与制造业信息化、微系统技术&#xff1b;是中国工业领域规模最大…

mysqldump 搭建复制报错,竟然是因为这个!

作者详细分析了一个 mysqldump 搭建复制失败的问题分析过程和改进建议。 作者&#xff1a;李富强 爱可生 DBA 团队成员&#xff0c;熟悉 MySQL&#xff0c;TiDB&#xff0c;OceanBase 等数据库。相信持续把对的事情做好一点&#xff0c;会有不一样的收获。 本文来源&#xff1a…

Linux在history命令上显示日期时间

1.在用户的家目录下打开个性化设置文件.bashrc&#xff0c;添加入export HISTTIMEFORMAT" %F %T "并保存 2.在通过source命令使得配置文件生效&#xff0c;再次查看history命令就会显示时间了

Qt 桌面闹钟提示小程序

程序运行截图 倒计时 闹钟设置界面 闹钟弹窗提示提示音 源码 gitee源码链接 软件打包

ncnn-android-yolov7跑自己模型的注意事项

ncnn-android-yolov7 这是一个示例 ncnn android 项目&#xff0c;它依赖于 ncnn 库和 opencv https://github.com/Tencent/ncnn https://github.com/nihui/opencv-mobile https://github.com/xiang-wuu/ncnn-android-yolov7 如何构建和运行 步骤1 https://github.com/Ten…

C++_适配器模式——reverse_iterator模拟实现

文章目录 前言适配器(Adapter)容器适配器迭代器适配器——reverse_iterator具体逻辑完整代码 总结 前言 本篇博客主要会给大家讲解C的一个代码复用的重要方式——适配器模式&#xff0c;并且详细讲解stl是如何运用这中设计理念来实现reverse_iterator的&#xff0c;给出了模拟实…

【MySQL】centos 7下MySQL的环境搭建

从本期博客开始我们正式进入到数据库的学习&#xff0c;在学习数据库时所用到的工具是Linux环境下的MySQL 目录 一、检查环境中是否装有MySQL 二、获取MySQL官方yum源 三、配置MySQL官方yum源 四、一键安装MySQL 五、启动mysql服务 六、登录MySQL 七、修改mysql配置文件…

【Kafka】常用操作

1、基本概念 1. 消息&#xff1a; Kafka是一个分布式流处理平台&#xff0c;它通过消息进行数据的传输和存储。消息是Kafka中的基本单元&#xff0c;可以包含任意类型的数据。 2. 生产者&#xff08;Producer&#xff09;&#xff1a; 生产者负责向Kafka主题发送消息。它将消息…

智慧园区楼宇合集:数字孪生管控系统

智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施&#xff0c;以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网&#xff0c;实现数据的传输、共享和响应&#xff0c;提高园区的管理效率和运营效益&#xff0c;为居…

2023年一建学霸笔记

考点:单方取消或辞去委托承担的民事责任女《民法典》规定&#xff0c;因解除合同造成对方损失的&#xff0c;除不可归责于该当事人的事由外&#xff0c;无偿委托合同的解除方应当赔偿因解除时间不当造成的直接损失&#xff0c;有偿委托合同的解除方应当赔偿对方的直接损失和合同…

光模块高低温消光比差异大的原因分析

用于高速数字通信的光模块&#xff0c;需要具备一些特定的参数条件。其中的一个参数&#xff0c;就是消光比。消光比被用来描述最优的偏置条件和激光发射功率转化成调制功率的效率。今天就跟着小易来了解一下在实际应用中消光比产生差异的原因吧&#xff01; 一、消光比的定义…

给照片加水印软件让你保护版权不麻烦

嘿&#xff01;想要保护你的照片免受盗用吗&#xff1f;或者想为你的作品增添独特的标识&#xff1f;好消息是现在有一种水印技术可以帮你解决这些问题&#xff0c;那么&#xff0c;你知道照片加水印软件有哪些吗&#xff1f;还不清楚的朋友请你关注下这篇文章哦。接下来让我来…

125K天线驱动器芯片UM12020D 最大直流驱动电流高达1.8A

UM12020D一个集成的天线驱动器&#xff0c;该芯片提供高达1.8A的输出直流电流&#xff0c;可在0至11V的天线电源&#xff08;VM&#xff09;和1.8V至5V的器件电源电压 (VCC) 上工作。该产品具有超低的rds-on&#xff0c;采用SOP-8封装。UM12020D具有PWM&#xff08;IN1-IN2&…

防止超卖的7种实现

高并发场景在现场的日常工作中很常见&#xff0c;特别是在互联网公司中&#xff0c;这篇文章就来通过秒杀商品来模拟高并发的场景。 本文环境&#xff1a; SpringBoot 2.5.7 MySQL 8.0 X MybatisPlus Swagger2.9.2模拟工具&#xff1a; Jmeter模拟场景&#xff1a; 减库存-…