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

数据结构(二)

目录

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.lryc.cn/news/96072.html

相关文章:

  • logback 自定义log字段(MDC)推送到logstash(spring boot + logback+ logstash)
  • 1253. 重构 2 行二进制矩阵
  • 安全—01day
  • 【Git】Please commit your changes or stash them before you merge的解决方法
  • 网卡收发包系统结构收发包流程,tcp/ip协议,socket套接字缓冲区,滑动窗口,mtu/mss
  • VUE之axios使用,跨域问题,拦截器添加Token
  • 阿里云函数计算签名认证(iOS实现细节备注)
  • 成都爱尔蔡裕:泡在“糖”里的脆弱血管,暴露在眼睛深处
  • 神经网络小记-过拟合与欠拟合
  • 外贸行业企业邮箱选择:安全好用的邮箱服务
  • flutter开发实战-RepaintBoundary实现Widget截图功能
  • vue中路由懒加载的写法
  • 【Spring MVC】小文件上传的多种方法
  • UE5.1移动端PreintegratedSkinBxDF解析
  • WebSocket心跳机制(笔记大全)
  • Spring Boot日志:SLF4J和Logback
  • [C++] C++入门第二篇 -- 引用 -- 内联函数inline -- auto+for
  • Latex | 将MATLAB图并导入Latex中的方法
  • JSON格式Python,Java,PHP等封装根据关键词搜索获取淘宝商品列表数据API
  • MySQL MHA高可用配置及故障切换
  • PHP8知识详解:PHP8开发工具VS Code的安装
  • Sui Move与标准Move的有哪些区别和根本性创新
  • 构建自己的ChatGPT:从零开始构建个性化语言模型
  • 【react】react18的学习(十二)– 底层原理(二)之 迭代器 iterator
  • 一遍过JavaSE基础知识
  • 【云原生】Kubernetes之ConfigMap
  • 8.python设计模式【组合模式】
  • tkinter制作任意图形窗口
  • 视频监控综合管理平台EasyCVR多分屏默认播放协议的配置优化
  • 2023杭电多校第三场 1012.Noblesse Code