笔记
文章平均质量分 83
星河依旧长明
备战中考的初三生 && 吉林 OIer,因为学业,不定期更新
展开
-
【笔记】左偏树
左偏树本质上是一个二叉堆,支持O1O(1)O1求最值,OlognO(\log n)Ologn删除最值。不过由于它还支持OlognO(\log n)Ologn合并两个二叉堆,所以一般左偏树相关的题目都是若干棵左偏树构成森林。左偏树中每个节点维护两个值,点权vvv和与最近空节点的距离distdistdist。点权vvv满足堆性质,即当前点点权小于任意一个儿子的点权。这种二叉堆我们一般称为“小根堆”。原创 2023-12-21 16:51:14 · 931 阅读 · 0 评论 -
【笔记】网络流算法模板
Dinic 算法其实是 EK 算法的一个暴力的优化,EK 算法每次只能搜索一条增广路径,而 Dinic 算法每次都用 DFS 的形式尽可能多的搜索增广路径。而图中可能存在环,为了保证 DFS 的过程中不会造成死循环,这里可以使用分层图,这样每次都是一层一层往下搜索,就不会出现死循环。因此跑最大流的 Dinic 板子即可,代码没有任何区别,就不再放了。图,并给定每条边的容量和费用,边的容量非负。的最大流,以及在流量最大时的最小费用。图,并给定每条边的容量,边的容量非负。图,并给定每条边的容量,边的容量非负。原创 2023-12-20 19:25:47 · 817 阅读 · 0 评论 -
【笔记】网络流基本概念
流网络:由一些点和有向边组成的可以有环的图,记作 G=(V,E)G=(\text V,\text E)G=(V,E),其中 V\text VV 是点集,E\text EE 是边集。定义 n=∣V∣,m=∣E∣n=|\text V|,m=|\text E|n=∣V∣,m=∣E∣,在本篇文章中使用。源点:在一个流网络中,入度为 000 且能流出的流量为 ∞\infty∞ 的点。一般用斜体大写字母 SSS 表示。汇点:在一个流网络中,出度为 000 且能流入的流量为 ∞\infty∞ 的点。一般用斜体大写字母 T原创 2023-12-20 17:34:57 · 1442 阅读 · 0 评论 -
【笔记】Splay 详细解读
Splay 是一种平衡树,并且是一棵二叉搜索树(BST)。它满足对于任意节点,都有左子树上任意点的值 < 当前节点的值 < 右子树上任意点的值。优点:支持多种操作。缺点:常数较大。单次操作均摊复杂度OlognO(\log n)Ologn。(注:关于 Splay 单次操作均摊复杂度的证明见OI-WikiSplay 基于旋转操作维护树的平衡。旋转分为左旋 (zag) 和右旋 (zig)。旋转,即在保证平衡树中序遍历不变的前提下,改变整个树的深度。原创 2023-12-20 12:45:49 · 1464 阅读 · 2 评论 -
【笔记】Splay 详细解读
Splay 是一种平衡树,并且是一棵二叉搜索树(BST)。它满足对于任意节点,都有左子树上任意点的值 < 当前节点的值 < 右子树上任意点的值。优点:支持多种操作。缺点:常数较大。单次操作均摊复杂度OlognO(\log n)Ologn。(注:关于 Splay 单次操作均摊复杂度的证明见OI-WikiSplay 基于旋转操作维护树的平衡。旋转分为左旋 (zag) 和右旋 (zig)。旋转,即在保证平衡树中序遍历不变的前提下,改变整个树的深度。原创 2023-09-27 18:51:06 · 558 阅读 · 0 评论 -
【C++】快读&快写模板及火车头优化代码
快读快写,顾名思义,就是提升输入和输出的速度。在这里简单介绍一下几种输入输出的优劣。C++cin / cout输入输出:优点是读入的时候不用管数据类型,但是缺点就是比scanf/printf慢一些。这里给一个关同步流的代码,可以显著优化cin / cout需要注意的是,关了同步流之后就不能再用了。C输入输出:与 C++ 对比,比cin / cout快一些,但使用方法细节比较多,容易出锅。快读/快写:只能处理整数读入 / 输出,但是要比标准输入输出函数都快得多。原创 2023-08-11 08:13:21 · 1086 阅读 · 0 评论 -
【笔记】树状数组
树状数组是一种树形数据结构,支持在OlognO(\log n)Ologn的时间复杂度内进行单点修改和查询前缀和的操作。优点:常数小,码量小,操作灵活简便。缺点:只能用来维护具有结合律且可差分的信息。例如:区间和、积等,而不能维护区间最大(最小)值。暴力O1O(1)O1OnO(n)On前缀和OnO(n)OnO1O(1)O1那么我们不妨考虑一个折中的办法,两种操作都是OlognO(\log n)Ologn的复杂度。原创 2023-08-10 20:54:36 · 385 阅读 · 0 评论 -
【笔记】线段树
线段树是一棵二叉树。如果删去最后一层节点,它是一棵完全二叉树。线段树是一种常用于处理区间问题的数据结构,分为 递归式线段树 和 非递归式线段树(又称zkw线段树)。其时间复杂度一般为OnlognOnlogn,不过常数较大。如果追求最优解,建议使用树状数组。线段树的常用操作共有333单点修改,区间查询。区间修改,单点查询。区间修改,区间查询。下面的例题就以这三种情况和求和操作为例讲解。放个图:我们考虑完全二叉树的性质:若当前节点的编号为xxx。原创 2023-08-09 11:23:39 · 250 阅读 · 0 评论 -
【笔记】欧拉回路与欧拉路径
于是我们得出:对于除了起点与终点外的点,由于它们的度数是偶数,则只要它从某一个过环出发,则必然会走完这个环回到这个点。这里连通图定义为所有边都能相互到达。在欧拉回路与欧拉路径中,允许存在孤立的点。有向图的“连通”与此相同。显然,上面的结论都是欧拉路径(欧拉回路)的性质,所以必然成立。因此这些结论都是存在欧拉路径的必要条件。那此时一个图就可以看作一条路径和附着在这条路径上的若干个环。接下来考虑怎么标记访问过的边。原创 2023-08-01 10:27:21 · 468 阅读 · 0 评论 -
抖音超火的数字炸弹 c++ 实现
本人第一次写文章,如有错误,请见谅!大家好,今天给大家带来猜数字游戏C++版游戏原理:初始数据范围1-100,后随机生成一个数,如果猜的数在所给范围中,范围就会不断缩小,如果猜中,就会受到惩罚。(p.s:如果不想要解析,可以直接跳到最后)写程序最重要的是什么?脑子?不,是基础程序…#include<bits/stdc++.h>using namespace std;int main(){ return 0;}先定义几个变量:int ans=17;/原创 2021-10-30 10:20:14 · 5100 阅读 · 0 评论 -
进度条 c++实现
本人第三次写文章,请大家多多支持!今天教大家如何制作游戏中的进度条......#include<windows.h>#include<iostream>#include<conio.h>using namespace std;void color(){//设置颜色-蓝底白字 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),159);}void SetPos(int x,int y)原创 2021-10-31 08:29:18 · 886 阅读 · 0 评论 -
【C++】 排列与组合算法详解(进阶篇)
C++排列与组合算法详解最开始,我是抱着水题解的想法写的,但却成为了阅读量最高的文章,没有之一。所以今天咱们来重制一篇文章,介绍几个进阶优化版的算法。原创 2023-05-20 20:06:19 · 3630 阅读 · 5 评论 -
【C++】关于y总代码格式的研究
【C++】关于y总代码格式的研究原创 2023-01-17 13:31:46 · 292 阅读 · 1 评论 -
C++排列与组合算法详解
介绍一下排列组合算法原创 2022-01-03 19:45:44 · 9141 阅读 · 7 评论