合集-算法笔记

摘要:是一种数据结构,常用于解决元素分组的问题 管理一系列不相交的集合,支持合并和查询两种操作 主要思想:用集合的一个元素代表集合,即祖宗代表家族 若是了解一些图论基础,可以发现并查集类似于一棵树,根节点就是祖宗,子节点就是集合的其他元素 基础代码 int f[N]; void init(int n) { 阅读全文
posted @ 2024-07-08 22:14 clockleaf 阅读(23) 评论(0) 推荐(0)
摘要:问题描述 给定一个序列a{1}, a{2}, a{3}, ... , a{n},如何求出该序列的最大子段和?(询问的区间个数为m) 分析 解决方案: 暴力统计:对于每一个区间[l, r],每一次选定一个子段的起点,然后枚举子段的长度,时间复杂度为O(mn^{2})。 动态规划:我们一次性算出所有的区 阅读全文
posted @ 2024-10-10 19:18 clockleaf 阅读(328) 评论(0) 推荐(0)
摘要:又名函数式线段树。(这不重要) 一个数据结构,能访问到历史版本的数据,常用于可持久化和区间K大值,是线段树的一个升级版。专门用于区间第K大值查询问题。 主席树是可持久化线段树的一种特殊实现。 原理 首先我们要将所有数字离散化。 主席树相当于是在每个位置维护了一个线段树,线段树的节点是一个区间[x, 阅读全文
posted @ 2024-10-10 19:34 clockleaf 阅读(53) 评论(0) 推荐(0)
摘要:最短路径 单源最短路:已知起点,求到达其它点的最短路径 ​ 常用:Dijkstra算法、Bellman-Ford算法、SPFA算法 多源最短路:求任意两点之间的最短路径 ​ 常用:Floyd算法 上述算法介绍,推荐文章:http://t.csdnimg.cn/IuCsu Dijkstra(迪杰斯特拉 阅读全文
posted @ 2024-10-10 19:37 clockleaf 阅读(130) 评论(0) 推荐(0)