分层图
摘要:分层图 基本概念: 求最短路径问题时,从点1到点n的最短路径。有种魔法,使一条路的长度变成
1/2. 求使用魔法次数不超过k次,从点1到点n的最短路径。 JLOI2011]飞行路线 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) BJWC2012]冻结 - 洛谷 | 计算机科学教
阅读全文
posted @
2021-11-30 22:18
naiji
阅读(76)
推荐(0) 编辑
扩展欧几里得
摘要:扩展欧几里得 问题描述 对于三个整数 a, b , c. 求解
ax+by=c 的( x , y )的整数解。 推导过程 首先我们要判断是否存在解,对于这个这个存在整数解的充分条件是 c 是 gcd(x,y) 的倍数。 朴素欧几里得 对于求解 gcd(x,y) 我们需要用 朴素欧几里得定理 。
阅读全文
posted @
2021-11-28 16:11
naiji
阅读(37)
推荐(0) 编辑
全源最短路径
摘要:全源最短路径 P5905 【模板】Johnson 全源最短路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Johnson 和 Floyd 一样,是一种能求出无负环图上任意两点间最短路径的算法。 1,算法概述 任意两点间的最短路可以通过枚举起点,跑 n 次 Bellman-For
阅读全文
posted @
2021-11-27 19:33
naiji
阅读(95)
推荐(0) 编辑
markdown
摘要:markdown快速入门 1,代码块 //代码块语法 ```c++ #include<iostream> using namespace std; int main() { return 0; } 2,标题 //标题语法 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 #####
阅读全文
posted @
2021-11-27 18:49
naiji
阅读(75)
推荐(0) 编辑
回文字符串问题
摘要:回文串问题 题目描述: 将一个字符串s1加上x个字符,使得字符串变成回文串。求x的最小值? [P1435 IOI2000]回文字串 / [蓝桥杯2016省]密码脱落 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 分析: s2=字符串s1的倒叙, 求s1和s2的最长公共子序列,
阅读全文
posted @
2021-11-13 22:30
naiji
阅读(23)
推荐(0) 编辑
强连通分量+缩点
摘要:强连通分量+缩点 使用tarjan算法求强连通分量,再把强连通分量缩成一个点。 所需的数据结构 int dfn[10004];//遍历到i节点时的时间戳 int low[10004];//i节点不通过父节点可以回溯到的最小时间戳 int book[10004];//表示i是否入栈 stack<int
阅读全文
posted @
2021-11-13 22:29
naiji
阅读(46)
推荐(0) 编辑
欧拉回路
摘要:欧拉回路 摘自:欧拉回路基本概念+判断+求解 - 王陸 - 博客园 (cnblogs.com) 1,定义 如果图G(有向图或者无向图)中所有边一次仅且一次行遍所有顶点的通路称作欧拉通路。 如果图G中所有边一次仅且一次行遍所有顶点的回路称作欧拉回路。 具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉通
阅读全文
posted @
2021-11-11 14:10
naiji
阅读(374)
推荐(0) 编辑
树的直径
摘要:树的直径 定义 树上所有点的最短距离的最大值。 或者,树上最长的一条路径 算法思想 ①从任意一点P出发,通过DFS寻找离它最远的点Q。 ②再次从点Q出发,通过DFS寻找离它最远的W。 ③直径即为WQ。 【朝夕的ACM笔记】树上问题-树的直径 - 知乎 (zhihu.com)
阅读全文
posted @
2021-11-11 14:09
naiji
阅读(43)
推荐(0) 编辑
二分图
摘要:二分图的最大匹配 摘自二分图的最大匹配 - 爱国呐 - 博客园 (cnblogs.com) 一,概念 如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为两个不相交集 U 和V ,使得每一条边都分别连接U、V中的顶点。如果存在这样的划分,则此图为
阅读全文
posted @
2021-11-11 14:09
naiji
阅读(145)
推荐(0) 编辑
树的重心
摘要:树的重心 定义 树的重心。找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。 性质 树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个重心,他们的距离和一样。 把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连线上。
阅读全文
posted @
2021-11-11 14:08
naiji
阅读(34)
推荐(0) 编辑
基础数论
摘要:基础数论
X!−1=1×1!+2×2!+3×3!+....+(x−1)×(x−1)! 互质 互质数为数学中的一种概念,即两个或多个整数的公因数只有1的非零自然数。公因数只有1的两个非零自然数,叫做互质数。 %模运算 (a + b) % p = a
阅读全文
posted @
2021-11-11 12:56
naiji
阅读(164)
推荐(0) 编辑
最长上升子序列
摘要:最长公共子序列 子串和子序列的区别: 子串是序列中连续的一串,子序列不一定连续。 思路: dp f[i][j];表示第一个字符串前i个字符和第二个字符串前j个字符的lcs if(a[i]==b[j]) f[i][j]=f[i-1][j-1]; else f[i][j]=max(f[i-1][j],f
阅读全文
posted @
2021-11-11 12:23
naiji
阅读(31)
推荐(0) 编辑
高精度
摘要:高精度 高精度乘法+dp+高精度max [P1018 NOIP2000 提高组] 乘积最大 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
阅读全文
posted @
2021-11-11 12:20
naiji
阅读(106)
推荐(0) 编辑
欧拉函数
摘要:欧拉函数 欧拉函数知识点总结及欧拉函数打表代码(数论) - 王陸 - 博客园 (cnblogs.com) 一。概念 在数论中,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。 例如φ(8)=4,因为1,3,5,7均和8互质。 欧拉函数用希腊字母φ表示,φ(N)表示N的欧拉函
阅读全文
posted @
2021-11-11 12:18
naiji
阅读(270)
推荐(0) 编辑
algorithm
摘要:algorithm 全排列 bool prev_permutation(iterator start,iterator end); bool next_permutation(iterator start,iterator end);//输出全排列 若下一个排序的字典序不是最大,返回true; 若是
阅读全文
posted @
2021-11-11 12:09
naiji
阅读(198)
推荐(0) 编辑
简单字符串
摘要:字符串转换函数:<stdlib.h> 字符串换为数字: sscanf(char *s,"%d%s%lf",&a,b,&c);//从字符串中读入信息 返回值: 成功则返回参数数目;失败则返回-1; 数字转换为字符: sprintf(char *s,"%d%s%f",a,b,c);//将信息输入到字符串
阅读全文
posted @
2021-11-11 12:05
naiji
阅读(74)
推荐(0) 编辑
KMP算法
摘要:KMP算法: KMP字符串匹配算法 - 王陸 - 博客园 (cnblogs.com) KMP算法中的next数组: //nxt[i]表示字符串[0~i-1]的所有前缀和后缀中,前后缀相同的最大长度. int nxt[100]; 获得nxt数组(nxt[j]表示当匹配到j失败是跳转到nxt[j]位置)
阅读全文
posted @
2021-11-11 11:59
naiji
阅读(36)
推荐(0) 编辑
字符串哈希
摘要:字符串hash //字符串s长度从1~len char s[100000]; unsigned long long h[100000]; unsigned long long q[100000];//q[i]表示base的i次方 int base=131;//一般为131,ull自动取模 for (
阅读全文
posted @
2021-11-11 11:57
naiji
阅读(34)
推荐(0) 编辑
字典树
摘要:字典树 int k = 1; int trie[1000000][26],col[1000000]; //插入算法 void insert(string& s) { int len = s.length(), p = 0; for (int i = 0; i < len; i++) { int c
阅读全文
posted @
2021-11-11 11:54
naiji
阅读(28)
推荐(0) 编辑
树状数组
摘要:树状数组 浅谈树状数组 - 王陸 - 博客园 (cnblogs.com) 首先我们要明白树状数组是一种数据结构,利用树状数组可以以空间换取时间,这一点和之前的线段树一样,但是树状数组访问会更快,效率更高,树状数组不同于线段数的一点就是这棵树的构成。 单点修改,区间查询: 记录详情 - 洛谷 | 计算
阅读全文
posted @
2021-11-11 11:53
naiji
阅读(33)
推荐(0) 编辑
线段树
摘要:线段树 浅谈线段树 - 王陸 - 博客园 (cnblogs.com) 具体例题 区间加法和区间求和: 记录详情 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 区间加法乘法,求和 记录详情 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) SCOI2010] 序列操
阅读全文
posted @
2021-11-11 11:44
naiji
阅读(31)
推荐(0) 编辑
trajan
摘要:trajan 求割点,桥,最近公共祖先(LCA)tarjan算法和倍增, 求割点: P3388 【模板】割点(割顶) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 求桥: P1656 炸铁路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 求桥和割点是一类问题:
阅读全文
posted @
2021-11-11 11:02
naiji
阅读(102)
推荐(0) 编辑
最短路径
摘要:最短路径 单源最短路径: n个点到一个点的最短距离:建立反向图, 方法一, Dijkstra算法:利用贪心思想,(不等处理负权的情况) [dijkstra普通算法](记录详情 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)) [dijkstra堆优化算法](记录详情 -
阅读全文
posted @
2021-11-11 10:53
naiji
阅读(111)
推荐(0) 编辑
最小生成树
摘要:最小生成树 两种方法: 1,Prim(加点法) 从随便一个点i开始,dis[i]=0,dis[其他点]=无穷, 进行n次循环, 每次找到距离集合最短距离的点k, 更新dis数组,dis数组表示点j到集合的最小距离 若dis[j]>点k和点j的距离,则更新 最后将dis数组求和即为ans 记录详情 -
阅读全文
posted @
2021-11-10 23:03
naiji
阅读(28)
推荐(0) 编辑
拓扑排序
摘要:拓扑排序 是对图(有向无环图)中的顶点按照某种先后顺序进行遍历。 拓扑排序的实现: 用一个数组ind[1000],来表示指向第i个节点的边数, 从ind[i]为0的带你开始遍历,删除该节点连接其他节点的边,且其他节点的ind值-1, 该节点结束后,找到下一个ind为0的节点重复上述过程。 整个遍历过
阅读全文
posted @
2021-11-10 23:02
naiji
阅读(36)
推荐(0) 编辑
中缀表达式转化为后缀表达式
摘要:中缀表达式转化为后缀表达式 中缀表达式转化为后缀表达式: 使用栈,且满足如下规则: 1,遇到数字直接输出 2,遇到(进栈 3,遇到+-*/时,若栈为空进栈,若不为空,判断栈顶符号的优先级,若栈顶符号优先级>=当前符号优先级,则出栈 4,遇到),逐个出栈,直到(.后将)出栈 5,读到末尾,将栈中所有符
阅读全文
posted @
2021-11-10 22:43
naiji
阅读(63)
推荐(0) 编辑
卡特兰数
摘要:卡特兰数 卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列。 卡特兰数前几项为 : C0=1,C1=1,C2=2,C3=5,C4=14,C5=42,C6=132,C7=429,C8=1430,C9=4862,C10=16796 输入一个整数n,计算h(n)。 令h(0)=1,h(1)=1,C
阅读全文
posted @
2021-11-10 22:41
naiji
阅读(238)
推荐(0) 编辑
逆元
摘要:逆元 逆元: 若a*x≡1(mod b) ,<a,b互质>,则称x为a的逆元, 应用: 当过程中需要计算a/b且对a/b取模时,有时b过大会超出范围,所以需要变除法为乘法。 一,费马小定理 局限性:p必须为质数 若p为质数,a为正整数,则a^(p-1)=1 (mod p); 即a^(p-1)=a*a
阅读全文
posted @
2021-11-10 22:38
naiji
阅读(90)
推荐(0) 编辑
cmath中的函数
摘要:cmath中的函数 double sin(double x) double cos(double x) double exp(double x) 返回e^x double log(double x) double pow(double x,double y) 返回x^y double sqrt(do
阅读全文
posted @
2021-11-10 22:28
naiji
阅读(113)
推荐(0) 编辑
快速幂,龟速幂矩阵快速幂
摘要:快速幂和龟速幂 快速幂: //当a=n=0时要特判 int QuickPow(int a, int n) { if (n == 0) return 1; else if (n % 2 == 1) { return QuickPow(a, n - 1) * a; } else { int temp =
阅读全文
posted @
2021-11-10 22:28
naiji
阅读(70)
推荐(0) 编辑
归并排序
摘要:归并排序 1.先将数组进行二分 2,对每一部分进行排序,然后合并 #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #include<vector> #include<queue> using names
阅读全文
posted @
2021-11-10 22:27
naiji
阅读(22)
推荐(0) 编辑
逆序对
摘要:主要摘自逆序数 - 王陸 - 博客园 (cnblogs.com) 逆序对 定义: 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。 举一个例子 2 4 3 1 5 4 之前有0个 3 之前有1个 1 之前有
阅读全文
posted @
2021-11-10 22:26
naiji
阅读(54)
推荐(0) 编辑
单调栈
摘要:单调栈 单调栈,就是维护一个栈,使栈中的数据大小呈现(单调递增/单调递减)。 问题描述 给定一个n行m列的矩阵,求该矩阵的最大面积子矩阵。 #include<iostream> #include<cmath> #include<algorithm> #include<stack> #include<
阅读全文
posted @
2021-11-10 16:59
naiji
阅读(21)
推荐(0) 编辑
判断质数
摘要:质数 一,求1e7以内的质数,用到质数筛 欧拉筛法 //isprime[i]数组存i是否为质数 int isprime[10000001], s[10000000];//s数组存所有的质数 int k = 1; memset(isprime, 1, sizeof(isprime)); isprime
阅读全文
posted @
2021-11-10 16:48
naiji
阅读(57)
推荐(0) 编辑
并查集
摘要:并查集 维护n个元素,刚开始每个元素自己一个集合,支持两个操作。 合并两个元素所在的集合 询问两个元素是否在相同的集合内 一,带路径压缩的查找函数 int find(int x) { if (f[x] != x) { f[x] = find(f[x]); } return f[x]; } 二,合并两
阅读全文
posted @
2021-11-10 16:34
naiji
阅读(33)
推荐(0) 编辑
c++STL中的数据结构
摘要:bitset 在头文件#include中 bitset<4> a; 支持下标从0开始,0在最后面 a[0]=1;a[2]=1;//a:0101 bitset可以进行的运算: bitset<4> a,b; a=a|b; a=a&b; a=a^b; a=b<<2; a=b>>3;//移位越过的自动舍弃
阅读全文
posted @
2021-11-10 11:35
naiji
阅读(65)
推荐(0) 编辑