
OI模板
文章平均质量分 57
AiRC0S
OIer
展开
-
OI模板 欧拉函数
欧拉函数(),即φn表示的是小于等于n和n互质的数的个数。nφnnφnnφn。原创 2023-01-31 13:17:44 · 471 阅读 · 1 评论 -
OI模板 快速傅里叶变换(FFT)
代码】OI模板快速傅里叶变换(FFT)原创 2022-07-20 13:39:39 · 229 阅读 · 0 评论 -
OI模板 AC自动机
OI模板 AC自动机trie 树上算失配指针,感觉和kmp没啥关系简单版://P3808#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10;struct AhoCorasick_Automaton{ struct node{ int ch[26], end, fail; } T[N]; int cnt; void init(){ for(int i = 0; i < N; ++ i)原创 2022-05-27 21:36:45 · 146 阅读 · 0 评论 -
OI模板 卢卡斯定理
卢卡斯定理 / Lucas\text{Lucas}Lucas定理现有问题:给定整数 n,m,pn,m,pn,m,p,求 (nm) mod p\dbinom{n}{m}\bmod p(mn)modp,保证 p∈Pp\in\mathbb{P}p∈P。1≤n,m,p≤1051\leq n,m,p \leq 10^51≤n,m,p≤105。可以用 Lucas 定理解决。定义对于 p∈Pp\in\mathbb{P}p∈P,有 (nm) mod p=(⌊n/p⌋⌊m/p⌋)×(n mod pm mo原创 2022-04-26 11:42:16 · 198 阅读 · 0 评论 -
OI模板 网络流模型
网络流模型网络最大流一张图,求从源点到汇点的最大流量。Dinic\text{Dinic}Dinic注意:如果原图为无向图,正反边权值都要设为 www。const int N = 210, M = 1e4 + 10, Inf = 1 << 29;int Head[N], Edge[M], Leng[M], Next[M], tot = 1;int dep[N], now[N];void addedge(int u, int v, int w){ Edge[++tot] =原创 2022-04-26 11:40:46 · 246 阅读 · 0 评论 -
OI模板 最大匹配
最大匹配(二分图、一般图)二分图最大匹配匈牙利算法const int N=510;int n,m,e,Match[N],u,v,ans;bool Vis[N],E[N][N];inline int dfs(int x){ for(int i=1; i<=m; ++i) if(!Vis[i] && E[x][i]){ Vis[i]=true; if(!Match[i] || dfs(Match[i])){ Match[i]=x; retur原创 2022-04-26 11:39:43 · 113 阅读 · 0 评论 -
OI模板 分数规划
分数规划分数规划用来求一个分式的极值:给出 ai,bia_i,b_iai,bi,求一组 wi∈{0,1}w_i\in\{0,1\}wi∈{0,1} 使 ∑i=1naiwi∑i=1nbiwi\displaystyle\frac{\sum_{i=1}^n a_iw_i}{\sum_{i=1}^n b_iw_i}∑i=1nbiwi∑i=1naiwi 最小化或最大化,再加上一些奇怪的限制。所以背包、树形背包、最小生成树、最短路、二分图最大匹配等问题都可以套个分数规划变得毒瘤。求解二分求原创 2022-04-26 11:38:40 · 254 阅读 · 0 评论 -
OI模板 Tarjan与连通性
Tarjan\text{Tarjan}Tarjan 与连通性补充(很重要):关于tarjan的一些大问题:tarjan中low数组的一个问题:if(!dfn[v]){ tarjan(v); low[u] = min(low[u], low[v]);} else low[u] = min(low[u], dfn[v]);这里如果v是u的父亲,那么low[u]就能被dfn[v]更新。如果求强连通分量和割点没什么问题,但在求割边的时候就有问题。割边的判断法则是 low[v]>d原创 2022-04-26 11:37:19 · 160 阅读 · 0 评论 -
OI模板 树状数组
OI模板 树状数组树状数组-单点加、区间和const int N=1;struct BIT{ int bit[N],a[N],n; #define lowbit(x) ((x)&(-(x))) inline void build(){ for(int i=1; i<=n; ++i){ bit[i]+=a[i]; int j=i+lowbit(i); if(j<=n) bit[j]+=bit[i]; } return; } inline voi原创 2022-04-26 11:34:33 · 133 阅读 · 0 评论 -
OI模板 后缀数组
OI模板 后缀数组Build SA&RKconst int N = 1;int SA[N], RK[N], n, m;int pre[N], cnt[N];char str[N];void BuildSA_RK(){ m = 122; for(int i = 1; i <= n; ++ i) RK[i] = str[i], ++ cnt[RK[i]]; for(int i = 2; i <= m; ++ i) cnt[i] += cnt[i-1]; for(int i原创 2022-04-26 11:33:01 · 238 阅读 · 0 评论 -
OI模板 树链剖分
OI模板 树链剖分重链剖分-查、改路径、子树点权const int N = 1;int Son[N], Nid[N], cnt, Fa[N], Dep[N], Siz[N], Top[N];//重儿子、新编号、新编号计数、父节点、深度、子树大小、链顶端节点 int Wegt[N], Nwet[N], Head[N], Edge[N], Next[N], tot;//点权、新编号点权、链式前向星 struct Node{ int sum, lazy, l, r; } T[N*4];int n,原创 2022-04-25 08:26:46 · 139 阅读 · 0 评论 -
OI模板 DP模型 线性/区间/树形
OI模板 DP模型 线性/区间/树形线性DP最长上升子序列(O(n2)O(n^2)O(n2))F[i]=max1≤j<i,aj<ai {F[j]+1}F[i] = \max\limits_{1\leq j<i,a_j<a_i}~\{F[j]+1\}F[i]=1≤j<i,aj<aimax {F[j]+1}int ans = 1;for(int i = 1; i <= n; ++ i){ dp[i] = 1; for(int j原创 2022-04-25 08:24:50 · 960 阅读 · 0 评论 -
OI模板 平衡树
OI模板 平衡树普通平衡树-FHQ Treapconst int N = 1;struct fhqTreap{ int ch[N][2], val[N], pri[N], siz[N], tot; int root, x, y, z; fhqTreap(){ newnode(0xcfcfcfcf), newnode(0x3f3f3f3f); } void update(int x){ siz[x] = siz[ch[x][0]] + siz[ch[x][1]] + 1; } int newn原创 2022-04-25 08:23:07 · 174 阅读 · 0 评论 -
OI模板 凸包
OI模板 凸包凸包-Andrewconst int N=1;const double eps=1e-8;int is0(double x){return (fabs(x)<eps?0:(x<0)?-1:1);}struct Point{ double x,y; Point(){} Point(double x,double y):x(x),y(y){} Point operator+(Point b){return Point(x+b.x,y+b.y);} Point op原创 2022-04-25 08:20:17 · 149 阅读 · 0 评论 -
OI模板 并查集
并查集原创 2022-04-25 08:17:49 · 222 阅读 · 0 评论 -
OI模板 高斯消元/线性基
高斯消元原创 2022-04-12 19:24:58 · 349 阅读 · 0 评论 -
OI模板 矩阵运算
matrix原创 2022-04-05 18:26:15 · 200 阅读 · 0 评论 -
OI模板 线段树
线段树原创 2022-04-05 18:23:03 · 177 阅读 · 0 评论 -
OI模板 gcd/逆元/同余
gcd exgcd 裴蜀 有理数取余 逆元原创 2022-03-22 20:33:11 · 184 阅读 · 0 评论