随笔分类 - 模板
摘要:背景: Johnson 和 Floyd 一样,是一种能求出无负环图上任意两点间最短路径的算法。该算法在 1977 年由 Donald B. Johnson 提出。 任意两点间的最短路可以通过枚举起点,跑 n次 Bellman-Ford 算法解决,时间复杂度是 O(\(n^2m\))的,也可以直接用
阅读全文
摘要:点击展开代码块 #include <bits/stdc++.h> #define mkp make_pair #define pb push_back #define all(x) x.bg,x.ed #define newline puts("") #define rep(i,n) for(int
阅读全文
摘要:1.P3919 【模板】可持久化线段树 1(可持久化数组) 点击查看代码块 #include <bits/stdc++.h> #define mkp make_pair #define pb push_back #define v(T) vector<T> #define all(x) x.bg,x
阅读全文
摘要:这里提供数字版KMP和字符串版KMP 点击查看代码块 #include <bits/stdc++.h> #define ed end() #define bg begin() #define mkp make_pair #define pb push_back #define vv(T) v(v(T
阅读全文
摘要:点击查看代码块 #include <bits/stdc++.h> #define ed end() #define bg begin() #define mkp make_pair #define pb push_back #define vv(T) v(v(T)) #define v(T) vec
阅读全文
摘要:tarjan 缩点 点击查看代码块 /* tarjan算法解析: https://blog.csdn.net/acmmmm/article/details/16361033 */ #include <bits/stdc++.h> using namespace std; const int maxn
阅读全文
摘要:注意:此次短路可以走重边 点击查看代码 /* 次短路: 边可以重复走 1.以1为起点跑最短路,以n为起点跑最短路。 2.枚举每一条边,次短路只可能是两种情况: (1)最短路上的最短的一条边跑三次 (2)除了最短路外的其他能到n的次短路 */ #include <bits/stdc++.h> usin
阅读全文
摘要:洛谷P6577 【模板】二分图最大权完美匹配 点击查看代码块 /* Kuhn-Munkres 复杂度O(n^3),加入松弛操作 */ #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<in
阅读全文
摘要:点击查看代码块 /* 找字典序最小的欧拉路,也可以做欧拉回路 */ #include <bits/stdc++.h> #define ed end() #define bg begin() #define mp make_pair #define pb push_back #define v(T)
阅读全文
摘要:点击查看代码块 /* trie树(前缀树) trie[maxnNode][charSet] trie[i][j] == 0 表示trie树中的第i号节点,没有连边 trie[i][j] == x 表示trie树中的第i号节点,与树中的第x号节点有一条连边,边权为字符集中的第j个字符 */ #incl
阅读全文
摘要:点击查看折叠代码块 //Zeller公式 /* 输入一个日期,计算这天是星期几 */ #include <bits/stdc++.h> using namespace std; int getId(int y, int m, int d) { if (m < 3) {y --; m += 12;}
阅读全文
摘要:点击查看折叠代码块 /* C(n,m) % p = n!/(m! * (n-m)!) % p = n! % p * inv[m!] % p * inv[(n-m)!] % p 求出1-n的前缀积pre[1]--pre[n] 和 1-n的逆元的前缀积 pre_inv[1]--pre_inv[n] 则
阅读全文
摘要:点击查看折叠代码块 #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<string> using namespace std; const int maxn=1e5+10; int a[maxn
阅读全文
摘要:点击查看折叠代码块 int read(){ int x=0,f=1;char ch=getchar(); while (ch<'0' || ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0' && ch<='9'){x=x*10+ch-48
阅读全文
摘要:P3381 【模板】最小费用最大流 添加了弧优化 点击查看折叠代码块 /* 最大流最小费用 费用为单位流量的费用 在最大流的前提下找最短路径即为最小费用 边权为当前边的流量乘以单位流量的费用 首先构建一个图用最短路算法来找到源点到各个点的最短距离 找到这个数据之后,我们就可以沿着最短路来进行增广,
阅读全文
摘要:增添了弧优化,bfs提前判断 点击查看折叠代码块 /* 时间复杂度: O(N*N*M) */ #include <bits/stdc++.h> #define DEBUG #define d1(x) std::cout << #x " = " << (x) << std::endl #define
阅读全文
摘要:模板:直接求一般图最大匹配: 同时求出match[i]表示与第i个节点匹配的点是哪一个 点击查看折叠代码块 #include <bits/stdc++.h> using namespace std; const int maxn=1010; const int inf=0x3f3f3f3f; typ
阅读全文
摘要:点击查看折叠代码块 /* 树的重心也叫树的质心。对于一棵树n个节点的无根树,找到一个点, 使得把树变成以该点为根的有根树时,最大子树的结点数最小。 换句话说,删除这个点后最大连通块(一定是树)的结点数最小。 性质: 1.树中所有点到某个点的距离和中,到重心的距离和是最小的(实际应用中经常用到此性质)
阅读全文
摘要:点击查看折叠代码块 /* 两次dfs 第一次定一个根找离他最远的点 然后以该点为根再找离他最远的点 参考:https://www.cnblogs.com/handsome-zyc/p/11237529.html */ #include <bits/stdc++.h> using namespace
阅读全文
摘要:模板: 二维单调队列维护二维区间最大值、最小值 点击查看折叠代码块 /* 二维单调队列可以维护区间的最大值,最小值 */ #include <bits/stdc++.h> using namespace std; typedef long long int LL; const int MAXN =
阅读全文

浙公网安备 33010602011771号