- 博客(17)
- 资源 (1)
- 收藏
- 关注
原创 2-SAT问题模板和TV Show Game
文章目录2-SAT问题模板题:https://www.luogu.com.cn/problem/P4782**2018-2019 ACM-ICPC Asia Seoul Regional K [TV Show Game](http://codeforces.com/gym/101987)**2-SAT问题就一抽象逻辑 + targin求强连通分量的问题K-SAT问题目前还不能再多项式时间内解决 只有暴力算法 ----- 大概率不会考吧!K-SAT就是一个值可以有多种选择?模板题:https:/
2020-11-04 20:50:37 329
原创 网络流全模板简单入门
文章目录网络流最大流增广路思路EK算法Dinic算法ISAP算法最高标志预流推进算法费用流模板题:K取方格数最小割求割边的数量:令每条边的容量为1即可 跑最大流算法即可经典问题:二选其一上下界网络流无源汇上下界可行流模板题:有源汇上下界可行流思路:在S和T之间加一条上界为00 下界为 0 的边即可有源汇上下界最大流思路:模板题:https://loj.ac/problem/116有源汇上下界最小流删除所有的附加边后退回流量即可!网络流24题网络流最大流增广路思路EK算法/* bfs + u
2020-11-04 13:59:10 208
原创 可持久化线段树模板 主席树
文章目录可持久化数据结构主席树模板题可持久化数据结构可持久化前提:本身的拓扑结构不变作用:记录修改了的历史邦本主席树可持久化线段树:简单思想就是每个被修改的节点重新建立一个节点 其余的节点连向先前版本。由于线段树每次每次修改区间的操作数量都是logn级别的故可以保证 算法时间复杂度 为 mlogn模板题两道题目都来源于洛谷可持久化线段树模板题如题,你需要维护这样的一个长度为 NN 的数组,支持如下几种操作在某个历史版本上修改某一个位置上的值访问某个历史版本上的某一位
2020-10-12 15:01:28 218
原创 基环树找环模板 dfs版本
文章目录基环树无向基环树内向基环树外向基环树基环树无向基环树[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rSJ5RTND-1601904376773)(C:\Users\lin\Desktop\QQ截图20201005211846.png)]找环代码#include <iostream>#include <algorithm>#include <cstring>#include <string>using
2020-10-05 21:26:50 681
原创 非常简单的红黑树 插入 和 删除操作讲解
文章目录红黑树红黑树的平衡条件:红黑树具体实现(数组实现):红黑树的节点定义:左旋以及右旋操作:红黑树插入操作(自底向上的插入操作)回顾红黑树的平衡条件首先找到需要插入的位置:建立新节点 并把这个节点染成红色,为什么染成红色,个人认为染成黑色也是可以的,但是后面的讨论和染成红色的有异罢了,这里为了方便 将节点染成红色红黑树删除操作红黑树所有平衡树 不同的地方 就是对于平衡条件的定义 ---- 如何想出一个均衡 的平衡条件 (对各个操作时间复杂度的均衡,以及空间的优化)。 红黑树是一个不错的选择。红
2020-10-05 20:25:36 219
原创 一遍学会最近公共祖先算法!!
文章目录最近公共祖先算法算法1.向上标记算法 时间复杂度O(n)算法2.倍增算法算法3. Tarjan算法 时间复杂度 O(n+m)//离线做法最近公共祖先算法算法1.向上标记算法 时间复杂度O(n)两个节点分别向上标记 找出第一个同时标记的点 就是他们的最近公共祖先 代码实现略(太简单)算法2.倍增算法倍增是对向上标记算法的一个优化 向上标记的过程中 我们可以使用倍增思想加速 跳的过程代码如下:#include <iostream>#include <algo
2020-10-05 09:33:34 231
原创 01分数约化问题一遍学会【模板】
文章目录01分数约化问题描述:代码实现:01分数约化问题描述:给定一张L个点、P条边的有向图,每个点都有一个权值f[i],每条边都有一个权值t[i]。求图中的一个环,使“环上各点的权值之和”除以“环上各边的权值之和”最大。输出这个最大值。问题就是求MAX(ΣVertex/ΣEdge)MAX(\Sigma Vertex/\Sigma Edge)MAX(ΣVertex/ΣEdge)我们可以二分答案ΣVertex−midΣEdge=0\Sigma Vertex - mid \Sigma Edg
2020-09-28 09:29:57 113
原创 c++左值右值 与 std::move()的前世今生
文章目录左值与右值std::move()std::move()std::move()注意:左值与右值左值我们直接可以控制的值 可以直接或者间接访问(合法)其的内存地址右值我们无法直接或者间接访问其的内存地址std::move()std::move()std::move()为什么需要引入std::move()std::move()std::move()请参考下面一个例子#include <cstdio>#include <cstring>using namespace
2020-09-28 08:54:39 106
原创 最小生成树模板
文章目录最小生成树算法1.prim算法2.kruskal算法最小生成树算法1.prim算法/* prim算法:找到当前最小的点加入生成树 然后用这个点更新其他没有加入生成树的点到生成树的距离 时间复杂度 n^2*/#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>using namespace std;const
2020-09-24 18:22:19 100
原创 如何求树的直径和中心
文章目录树的直径和中心如何求出树的直径如何求出树的中心树的直径和中心如何求出树的直径 树的直径就是从找到一条最长路径(不经过重复节点) 时间复杂度O(n) 需要把整棵树遍历一遍思路:动态规划思想:求出经过各个点的最长路径 取max 就是树的最长路径#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N = 2e4;i
2020-09-16 17:15:40 635
原创 树的重心以及其性质 模板
文章目录树的重心性质模板题树的重心定义:树的重心也叫树的质心。对于一棵树n个节点的无根树,找到一个点,使得把树变成以该点为根的有根树时,最大子树的结点数最小。换句话说,删除这个点后最大连通块(一定是树)的结点数最小。性质树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个重心,他们的距离和一样。一个点是重心,等价于,以这个点为根,它的每个子树的大小,都不会超过整个树大小的一半把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连线上。一棵树添加或者删除一个节点,树的重心最多
2020-09-16 17:15:06 442
原创 KMP匹配详讲以及AC自动机模板
文章目录KMP匹配以及AC自动机KMP匹配AC自动机KMP匹配以及AC自动机KMP匹配 对于初学字符串的人来说 kmp算法算是一个比较难以理解的算法,但是它在字符串匹配问题的效率中是很高的。核心思想:匹配过程中 对于每一次失败的匹配所提供的有用信息加以利用。abcabcabcd和abcabcd进行匹配匹配到 abcabc a abcabc d的时候匹配失败我们可以直接跳转到匹配 abcabc a abc a即跳转到它的最大首尾相同的字符
2020-09-11 22:29:11 146
原创 ACM中常用的求组合数的三种方法
文章目录组合数学求组合数的三种方法求组合数1求组合数2求组合数3原理:卢卡斯定理组合数学求组合数的三种方法求组合数1/* 利用Cab = Ca-1 b-1 + Ca-1 b 公式递推 时间复杂度O(ab)*/#include <iostream>#include <cmath>using namespace std;const int N = 2500,mod = 1e9+7;int c[N][N];int n,a,b;void ini
2020-09-07 10:32:36 967 3
原创 树状数组全解析---一遍必会的教程
文章目录树状背包算法原理基本模板查询操作改值操作模板题---洛谷P3374 【模板】树状数组 1扩展应用树状数组和差分的联系模板 P3368 【模板】树状数组 2树状数组加上数学公式POJ 3468树状背包对于求前缀和以及修改区间值 时间复杂度的一个平衡—将两个操作的时间复杂度都降低至O(logn)算法原理基本模板查询操作对想求【1,x】的区间和这里给出x的二进制形式 x = 0100101我们把【1,x】划分为以下区间(0100100,0100101】(0100000,010010
2020-08-22 21:16:56 167
原创 都2024年了你还不会Tarjan求强联通量算法嘛!!!
傻子都能看懂的求强联通分量(Tarjan算法)Strong Connected Component 强联通分量Tarjan算法思想:一次找到一个强连通分量内的所有点该算法充分利用了深度优先搜索的顺序性 以及 对以及确保处理完的强连通分量不会干扰后面求强连通分量的过程记(x,y)为 从x 到 y 的一条边记dfn为深度优先遍历的时间戳时间戳就是dfs到这个点的次序记low(u) 为时间戳为u的点所能到达的在栈内最小时间戳的点下面上代码!//Tarjan求有向图强连通算
2020-08-13 22:18:57 156
原创 一遍学会最短路算法!
文章目录最短路问题一.Floyd算法--求多源最短路问题---可以处理负权边----时间复杂度O(n^3)算法思想:f(i,j) = min( f(i,j) , f(i,K) + f(k,j) )二.Dijkstra算法--求单源最短路问题--不能处理负权边---时间复杂度O(nlogn)算法思想:用距离起点最近的边 去更新其他的边------------边只会被 比它短的一条边更新寻找最短边的过程可以被优先队列优化三.bellman-ford算法---可以处理负权边---时间复杂度O(M) 最坏O(
2020-08-06 13:00:15 155
原创 超级简单的整数划分dp
整数划分给你一个正整数N,请将其划分成n1+n2+n3…的形式,不考虑顺序,请求有多少种方案。N<=1000思路一:将问题抽象成完全背包问题问题的特点和背包问题很像:可以取任意件物品具有容量–背包性‘状态表示:f[i][j] 表示1-i的数字组合成合为j的全部组合数状态转移方程f[i][j]=f[i−1][j]+f[i−1][j−i]+f[i−1][j−2∗i]+....
2020-03-24 08:23:01 184
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人