- 博客(7)
- 收藏
- 关注
原创 二叉树相关知识
首先我们需要先知道如何用指针的形式来定义一个二叉树,这对我们后续的学习相当有帮助public:int val;val=x;于是我们可以将treenode当做类似结构体来运用,当我们需要定义一个根节点时,我们只需使用treenode* root就可以。
2025-03-20 21:55:48
558
原创 线段树(单点更新以及区间更新模版)
线段树的模版算法,就是将所给的数据存储在一个树中,可以快速的查找一个区间内的最值或一个区间的和,并支持单点或者区间的修改。比如一个lazy[id]表示(1,6)区间,那么显然对于sum,有sum[id]=(6-1+1)*lazy[id]这时我们可以看出,(3,5)实际上是(3,3)和(4,5)的组合。假设我们将1,1,4,5,1,4改为了1,1,4,6,1,4。我们对(1,3)与(4,6),让他继承(1,6)的lazy。接下来,我们假设这六个数的值分别为1,1,4,5,1,4。
2024-12-01 18:07:32
912
原创 鸽巢原理解决程序问题
比如说我有11只鸽子,有10个巢,我将11只鸽子依次放入每个巢,那么必将有1个巢有两个鸽子。当我们遇到需要每次消除几种不同类型的事物,直到消除完,求最小步数的题目时,我们就可以运用鸽巢原理。作为zzu的大一新生,这是我们招新赛的一道题,那么这就是一道鸽巢原理的板子题。我们一般将最大的元素作为巢的数目,将除最大元素之外,其他元素之和作为鸽子树。我们将最大元素5作为巢的数目,将20作为鸽子的数目。那么乍一看,巢的数目,就是我们本题的答案。maxa即为巢的数目,即最大的a[i]上面的每种颜色代表一种类型的车子。
2024-10-28 21:09:34
376
原创 重链剖分即LCA
我们的思路是,从根节点开始,运用dfs遍历,开始现将每个节点的siz记为1,然后运用dfs遍历其子节点,在回溯是通过比较子节点的大小找出重节点。我们已知每个节点都仅属于一条重链,所以,当我们从子节点往上跳,当我们跳到相同的重链时,其两点深度最小的节点即为所求的最小公共祖先。具体过程为,若两点不在一条重链上,我们让深度较大的点跳到其所处重链的父节点,在不断比较,给出lca函数代码。思路是,从根节点开始,如果其有重节点,我们就选择进入其重节点遍历,否则从其其他节点开始遍历。而重链即是重边首尾相接,注意,
2024-10-21 23:10:35
212
1
原创 vector建边的用法 邻接表
相信学过最短路的人都知道邻接矩阵,于是我爱上了邻接矩阵。结果然后RE=运行时错误所以邻接矩阵是行不通的!!!所以可以用vector优化一下struct Edge{ int to//去往点 int z//权值}vector<Edge>g[100005];于是我们假设当前点为x点调用时的区别邻接矩阵for(int...
2019-02-13 23:35:28
353
原创 dijkstra优化模板 单源最短路模板
#include<bits/stdc++.h>#include<queue>//很重要using namespace std;vector<int>g[100005];//记录一个点和那些边相连vector<int>l[100005];//记录一个点和别的边的长度int d[100005];//起点到每一点的距离bool done[10...
2019-02-13 23:16:40
151
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人