摘要:
二叉链存二叉树 预备知识 指针的熟练掌握 Bolg template模板的知识 Bolg 二叉树的基本知识 感谢: 代码参考:CSDN博主「云雨澄枫」的原创文章 链接 代码解析 结构体 BiNode template<class T> struct BiNode{ T data; BiNode<T> 阅读全文
摘要:
模板的使用 定义: 模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。 模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。 每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector <in 阅读全文
摘要:
指针 指针 顾名思义 就是指向一个元素(变量、数组、结构体、类...)的地址的变量 因为其指向元素多种多样 也就导致了其类型多种多样 以及有不同的语法 指针语法 符号表示 "*" 解地址符 表示解读地址 也就是把地址里的东西读出来 同时也用于定义 "&" 取地址符 表示取当前元素的地址 对于变量 定 阅读全文
摘要:
[vector/容器/向量/动态数组]的基本的用法 容器的定义 向量/容器(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。 跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。 摘自菜鸟教程 容器的初始化 阅读全文
摘要:
[C++]树链剖分 预备知识 树的基础知识 关于这个本文有介绍 邻接表存图 线段树基础 会区间加法和区间结合就可以了P3372 建议阅读这篇Blog 最近公共祖先LCA 虽然用不到这个思想 但是有类似的 有助于快速理解代码 建议阅读这篇Blog 题意解读 题目描述 如题,已知一棵包含 \(N\) 个 阅读全文
摘要:
线段树 区间修改 区间查询 请先阅读上一篇Bolg 算法思想 这次要引入一个核心变量: lazy 懒标记 为了达到区间修改的目的 又为了减少运算量 所以就需要引入懒标记这个变量 用来满足 即用即推 没有用到的时候便以懒标记的形式存在线段中 子线段要用了便向下推行 \(lazy\) 举个例子: 如果我 阅读全文
摘要:
线段树 区间修改 单点查询 请先阅读上一篇Bolg 算法思想 由于是区间修改 那就把下放的每一个线段给套上一层标记 来表达增加的值 单点查询就把那些标记穿起来就行了 当然 还要加上那原来的值 来举个例子: 我想要更改绿色这段区间的值 那就在绿色这段上下推标记 然后我又想在蓝色这段上更改区间值 那就继 阅读全文
摘要:
线段树 区间查询 单点修改 算法思想 这个算法是用于数组的查询和修改 可以高效的进行查询修改 但是会增加内存的使用 本质上是一种 空间换时间 的算法 这个算法把一串数组无限二分 直到分的只剩下一个数据 将每一段看成一个节点 这样就组成了一个树形结构 故名 线段树 代码实现 实现这个代码一共分三个步骤 阅读全文
摘要:
树形DP 保卫王国P5024 前置知识 1、邻接表 + Dfs(深度优先搜索) 2、基础DP(如 01背包 ) 3、最小公共祖先(LCA) LCA我有写过Blog 首先解读一下题意 城市即为节点 每个节点都有一个驻军资金 即节点的权值 现在要让每两个节点之间至少有一个节点拥有驻军 并给出 m 个要求 阅读全文
摘要:
最近公共祖先 LCA 倍增写法 LCA的倍增主要由三个重要的过程组成 预处理lg数组 DFS求fa depth 倍增节点 观看以下内容前建议先把完整代码大致纵览一遍,有利于理解各个函数的意义 倍增思想 暴力解决LCA是通过 x 和 y 一个一个的往上跳 而倍增的思想是希望节点能够一次性尽可能的多跳 阅读全文