合集-模板
并查集模板
摘要:#include <bits/stdc++.h> using namespace std; struct UFS { int sz; vector<int> rank, p; void link(int x, int y) { if (x == y) return; if (rank[x] > ra
求质因数模板
摘要:欧拉定理求质因数: //欧拉定理求质因数 long long phi(long long x) { long long i; long long res = x; for (i = 2; i * i <= x; i++) { if (x % i == 0) { res = res / i * (i
二分图最大匹配模板(匈牙利算法)
摘要:二分图最大匹配模板(匈牙利算法) P3386 【模板】二分图最大匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) struct augment_path { vector<vector<int> > g; vector<int> pa; // 匹配 vector<int> pb
欧拉函数模板
摘要://欧拉函数,质数 vector<int> euler_range(int n) { vector<int> phi(n + 1), prime; vector<bool> is_prime(n + 1, true); is_prime[1] = 0, phi[1] = 1; for (int i
ST表模板
摘要:#include <bits/stdc++.h> using namespace std; template <typename T> class SparseTable { using VT = vector<T>; using VVT = vector<VT>; using func_type
快速幂模板
摘要://快速幂 //底数128 long long ksm(__int128 a, long long b, long long p) { __int128 res = 1; while (b) { if (b & 1)res = res * a % p; b >>= 1; a = a * a % p;
字典树模板
摘要:#include <bits/stdc++.h> using namespace std; struct trie { int n; vector<array<int, 26>> trans; vector<int> cnt; trie() : n(0) { new_node(); } int ne
矩阵模板
摘要:struct Matrix { i64 N; vector<vector<i64>> A; Matrix() { N = 0;} Matrix(int n) { N = n; A.resize(N + 1); for (int i = 0; i <= N; i ++) A[i].resize(N +
Dijkstra单源最短路模板
摘要:struct DIJ { using i64 = long long; using PII = pair<i64, i64>; vector<i64> dis; vector<vector<PII>> G; DIJ() {} DIJ(int n) { dis.assign(n + 1, 1e18);
最近公共祖先模板(LCA)
摘要:include <bits/stdc++.h> using namespace std; struct LCA { int n; vector<int> dep; vector<vector<int>> e; vector<array<int, 21>> fa; LCA() {} LCA(int n
拓扑排序模板
摘要:#include <bits/stdc++.h> using namespace std; struct toposort { vector<vector<int>> e; vector<int> tp , din; int n ; toposort() {} toposort(int n) { t
区间素数筛模板
摘要:例题素数密度 template<typename T> struct segment_sieve { vector<bool> is_prime, is_prime_small; vector<T> prime; segment_sieve() { is_prime.resize(1000010);
Kruskal和Prim模板
摘要:例题:P3366 【模板】最小生成树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Kruskal #include <bits/stdc++.h> #define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std; usi
树状数组模板
摘要:单点修改,区间查询/区间修改,单点查询 template<typename T> struct BIT { int n; vector<T> w; BIT() {} BIT(int n) { this->n = n; w.resize(n + 1); } void update(int x, int
二维坐标离散化模板
摘要:struct Two_D_Discrete { int n, tot1 = 1, tot2 = 1; vector<vector<int>> mp; vector<int> x, y, nx, ny; vector<pair<i64, i64>> a; vector<PII> New; Two_D_
单点修改区间查最值-树状数组模板
摘要:单点修改区间查最值-树状数组模板 #include <bits/stdc++.h> #define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std; using i64 = long long; typedef pair<i64, i64>
KMP模板
摘要:KMP模板 struct Kmp { vector<int> next; void getNext(string p) { int j = 0, k = -1, n = p.size(); next.resize(n + 1); next[0] = -1; while (j < n) { if (k
二叉搜索树模板
摘要:struct Node { int data; Node* left; Node* right; Node* newNode(int v) { Node* node = new Node; node->data = v; node->right = node->left = NULL; return
DIjkstra进阶模板 路径记录 按权重(结点数最小等)记录
摘要:struct DIJ { using i64 = long long; using PII = pair<i64, i64>; vector<i64> dis, path, node; vector<vector<array<int, 3>>> G; int n; DIJ() {} DIJ(int
判断负环模板
摘要:判断负环模板 Bellman_ford \(\mathcal{O}(nm)\) struct Bellman_ford { using i64 = long long; using PII = pair<i64, i64>; int n; vector<i64> dis; vector<array<