![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
rising_sun2233
Never lose heart!
展开
-
spfa模板
题目: 传送门Code:#include <bits/stdc++.h>using namespace std;const int N = 100010;const int INF = 0x3f3f3f3f;struct Edge { int f, t, d;};vector<Edge> edges;vector<int> G[N];bool vis[N]; // 标记是否在队列中int n, m;int dist[N];void原创 2022-01-22 13:28:05 · 299 阅读 · 0 评论 -
快速排序简易实现
Code:#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;typedef long long LL;int partition(int arr[], int l, int r) { int p = arr[l]; while (l < r) { while (l &原创 2021-12-11 16:52:41 · 209 阅读 · 0 评论 -
递推打表组合数
递推打表组合数long long C[N][N]; // C[i][j]表示从i个物品里面取j个void init () { for (int i=0;i<N;i++) { for (int j=0;j<=i;j++) { if (!j) { C[i][j] = 1; } else { C[i][j] = (C[i-1][j-1] + C[i-1][j])原创 2021-08-09 00:33:44 · 86 阅读 · 0 评论 -
线性筛 (欧拉筛)(求1~n之间的素数)
Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#include <queue>#include <map>#include <set>#include <algorithm>using namespace std;typedef long l原创 2020-10-16 23:36:19 · 227 阅读 · 0 评论 -
kmp 模板
Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#include <map>#include <algorithm>using namespace std;typedef long long ll;typedef pair<int, int> P;cons原创 2020-10-16 10:46:46 · 77 阅读 · 0 评论 -
线段树(区间求和+区间更新)
题目: 传送门改进: 相较于单点更新,引入lazy数组,lazy[node] = val表示当前节点(node)维护的子区间全部都要加上val(可正可负)。lazy标记在区间更新和区间查询时下传(push_down)Code:#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <vector>#include <map&g原创 2020-10-05 18:13:48 · 329 阅读 · 0 评论 -
Dijkstra求最短路径
Code:#include<iostream>#include<queue>#include<vector>#include<algorithm>const int maxn = 1007;const int INF = 0x3f3f3f3f;//无穷大using namespace std;struct Edge { int from, to, dist; Edge(int f, int t, int d):from(f).原创 2020-09-27 17:31:54 · 103 阅读 · 0 评论 -
Bellman-Ford求单源最短路(不能存在负圈)复杂度O(|V|*|E|)
输入:第一行两个整数V(顶点数)和E(边数)下面有E行,每行三个数,表示相连的顶点以及边的长度(这里是无向图)7 101 2 21 3 52 5 102 4 62 3 43 4 24 6 15 6 35 7 56 7 9注意:核心代码:if (dis[e.from] != inf && dis[e.to] > dis[e.from] + e.cost) { dis[e.to] = dis[e.from] + e.cost; updat原创 2020-09-26 22:49:15 · 191 阅读 · 0 评论 -
线段树 查询区间最值(模板)
测试样例:Input:20 34582 370 8241 6956 5924 3427 8388 1936 557 2029 5501 2569 3186 3329 793 981 6039 8262 4956 31160 190 510 190 190 510 19Output:Before update:838882418262After update:999...原创 2020-03-30 22:39:57 · 512 阅读 · 0 评论 -
稀疏矩阵 实现O(nlogn)预处理 O(1)查询 (ST_RMQ模板)
Code:#include<cstdio>#include<cmath>#include<algorithm>#include<iostream>using namespace std;const int maxn = 100007;int dp_max[maxn][25];//dp_max[i][j]表示arr[i], arr[i...原创 2020-03-30 18:37:12 · 2648 阅读 · 0 评论 -
线段树 查询区间和(模板)
测试样例:Input:61 3 5 7 9 11Output:3546Code:#pragma GCC optimize(2)#include<cstdio>typedef long long ll;using namespace std;const int maxn = 10000;int tree[4*maxn];int arr[maxn];int ...原创 2020-03-22 00:37:45 · 176 阅读 · 0 评论 -
P1551 亲戚[并查集模板(rank优化+路径压缩)]
题目: 传送门大意: 有1 ~ n个人,现给定若干数对(x,y),表示x和y有亲戚关系。同时,关系具有传递性,即x和y有关,y和z有关,就会有x和z有关。现在要判断给出的若干数对的相关性,输出Yes或No思路: 使用并查集,也就是把有关系的数字放到若干个集合中,并从这些集合中随便选取一个数作为这个集合的标志,每个数 i 的标志保存在 pre[i] 数组中,于是查询时,只要看a和b所属集合的标志...原创 2020-03-13 22:15:10 · 203 阅读 · 0 评论 -
表达式求值
要求: 给一个只含+、-、*、/、(、)这6个字符的合法表达式,计算表达式的值Code:#include<iostream>#include<cstdio>#include<string>#include<queue>using namespace std;queue<char> q;double expresion_ca...原创 2019-12-17 23:31:11 · 119 阅读 · 0 评论 -
Dijkstra 模板(优先队列+vector存储图) O(mlog(n))
写成struct了#include<iostream>#include<queue>#include<vector>#include<algorithm>const int maxn = 1007;const int INF = 0x3f3f3f3f;using namespace std;struct Edge { int...原创 2019-12-07 17:08:48 · 241 阅读 · 2 评论 -
Dijkstra模板 O(n^2)
伪代码(出自刘汝佳的《算法竞赛入门经典第2版》):清除所有点的标号设d[0]=0, 其他d[i]=INF//INF被定义为一个很大的数字循环n次 { 在所有未标号结点中, 选出d值最小的结点x 给结点x标记 对于从x出发的所有边(x,y), 更新d[y] = min{d[y], d[x]+w(x,y)} //w(x,y)是指边xy对应的权值}我采用了邻接矩阵本渣渣的代码:#...原创 2019-12-06 23:00:13 · 186 阅读 · 0 评论