五一校内集训
DAY1
语言基础
int unsigned int等等的区别以及原理
以及溢出的情况
时间复杂度的分析很详细很详细
P,NP,NPC,NP-Hard的区别(自己看的时候leng是没看懂)
常用库函数的介绍
排序:
是否基于比较
试用情况
时间复杂度
数据结构是大部头
vector、list、queue、stack
支持多种多样的操作
手动实现
一点点图论
多种概念
(学长讲课的重点和我预想的不太一样emm...)
DAY2
Day2
存图
- 邻接表
- 邻接矩阵
- 前向星
- 链式前向星
- 定义:n个节点,n-1条边的连通无向图
树
无向无环连通图
任意两个节点之间有且仅有一条简短路径
- 定义的证明、
- 森林
- 生成树
- 有根树-无根树
- 深度(高度)
- 无根树:的叶节点是这棵树上度数不超过1的节点
- (只有一个节点的无根树)
- 父亲节点(根节点无父亲节点)
- 一个节点的祖先
- 子节点
- 叶子结点:无子节点
- 深度(从0定义)
- 特殊树:链,菊花图,二叉树(真二叉树,满二叉树,完全二叉树)
- Dfs O(n+m) O(n)
- Dfs序列:dfs括号序列—--------可以唯一确定一个有根树(反过来也成立
- 二叉树上的dfs序列:先序遍历,中序遍历,后序遍历
- 生成树 dfs树
存树
- Bfs O(n+m) O(n)
- (遍历出边)
- 二分图(bipartite Graph)
- 有向无环图
拓扑排序
l 时间空间都是线性的
l 有向无环图DAG
l
字符串
l 朴素算法
l Kmp
l Trie
l AC自动机
数据结构
l 堆(heap)
维护数的集合
功能:
- 插入一个元素inset
- 查询最小值getmin
- 删最小值deletemin
- 减小一个值desreasekey
(小根堆)
- Merge把一个堆得所有元素插到另一个堆中
类型:
- 二叉堆O(logn)
- 二项堆
- Fibonacci堆O(1)
二叉堆
- 二叉树(完全二叉树)
- 任一个节点的权值不大于他子节点的权值(根节点最小)
插入:
- 放入
- 交换-向上调整
- 时间复杂度O(logn)
- 满了就新增加一列
删除:
- Emm。。。
减小权值:
- 向上调整
Qwq:
- 编号
- 合并堆,向下调整---时间复杂度O()
- 二叉堆
- 优先队列
线段树
树状数组
分块
O(1)—O(根号n)
O(根号n)---O(1)
(颓颓颓---
DAY3.4
(又被咕咕咕的两天)
(我觉得我写的没有什么意义
Tarjan
[有向]
O(n+m)
dfn:时间戳
low:本节点及其子树
无强联通分量==邮箱五环
强联通分量-->缩点
[无向]
无强联通分量
割点----删掉不连通(点)
桥------删掉不连通(边)
点双联通
变双联通
fib堆:decrease O(1)
deletemm O(logn)
最短路
(可以不存在,不唯一)
单元最短路---sssp
所有节点对的---apsp
不过重复堤岸边
n n-1
1.floyd(求APSP)
O(n3)
2.bellman-ford(SSSP)
O(nm)
有向无环
dis[u]
dis[v] > dis[u] + len(u,v)
(松弛)
可判断是否有福泉环
3.spfa
O(n2)
4.dijkstra
(SSSP)
分两个集合
确定的 和 未确定的
非负边权
枚举出边 最小 加入 再枚举
最小生成树
Kruskal(贪心)
并查集
(边排序)
加边
prim
(加点)
O(nlogn+mlogn)
O(nlogn+m)
像dijkstra
DP
状态
状态和状态之间存在转移
策略
无后效性
==无环
有向无环图
树上DP
图上DP
背包
数位DP
(剪枝)
数学:数论、组合数学
埃氏筛
质因数分解
pollard-rho
RSA算法-利用
组合数
高精
最小平行生成树
图论数据结构
并查集
RMQ 区间最值查询
暴力
线段树
分块
分治
倍增DP
LCA
倍增DP
tarjan-并-LCA
离线
环套树
排序2
quick sort
期望O(nlogn)
linear solect
nth_element
堆排O(nlogn)
常数大
(正确性听得云里雾里的...)
(...)