
模板
楚颜a
现大一,一枚小up主,B站id:一只楚颜,很迷切掉一道题的成就感!
展开
-
【模板】并查集
寻找父亲: int getfather(int v) { if (father[v]!=v) //如果他不是父结点 father[v]=getfather(father[v]); //找到他的父结点,并且将每个孩子连到父亲那里,即路径压缩 return father[v]; //返回他的父亲 } 合并两个集合: void unionxy(int x,int y) //合并两个集合 { x=getfather(x); y=getfather(y);//找他们两个的父亲,即父结点原创 2020-11-07 09:56:39 · 218 阅读 · 0 评论 -
c++模板集合
spfa原创 2020-11-06 21:10:19 · 243 阅读 · 0 评论 -
P3371 【模板】单源最短路径(弱化版) spfa
#include<bits/stdc++.h> using namespace std; const int N=10010; int n,m,s,dis[N],vis[N]; struct node{ int to,w; }e; vector <node> a[N]; void spfa(int s) { for (int i=1;i<=n;i++) dis[i]=9999999; queue <int> q; q.push(s); dis[s]=0;原创 2020-11-05 09:20:26 · 180 阅读 · 0 评论 -
【模板】哈希
预处理: typedef unsigned long long ULL;//将unsinged long long 简写为ULL base=137; power[0]=1;//power[i]表示base的i次方 for (int i=1;i<=n;i++) //n为字符串的长度 power=power[i-1]*b; //预处理出base的n次方 求一段字符串的哈希: ULL ...原创 2019-08-13 19:51:42 · 183 阅读 · 0 评论 -
【模板】线段树
以维护区间最小值为例 单点修改: void change_point(int k,int l,int r,int x,int v) //单点修改 //k:当前结点 l,r:当前区间 x:原序列的位置 v:需要修改的值 { if (r<p||l>p) return; //当前区间与原序列的位置完全无交集 if (l==x&&r==x) //当前结点为对应的叶子...原创 2019-08-13 21:20:39 · 140 阅读 · 0 评论 -
【模板】KMP算法
用途:处理字符串匹配问题 例子:给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置 时间复杂度:O(n) 变量解释: A[i]:存储A串 B[i]:存储B串 p[i]:在B串中与字母B[i]相同的上一个字母的位置 给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置 预处理p[]: void pre() { p[1]=0; in...原创 2019-08-11 21:31:50 · 214 阅读 · 0 评论 -
【模板】树状数组
树状数组适用范围:单点修改,区间修改,单点查询,区间查询 注: a[]:原数组 tree[]:前缀和数组 -lowbit int lowbit(int n) { return n&(-n); }: -单点修改: void add(int x,int k)//在a[x]加上k,相当于在tree[]中x~n区间加上k { while(x<=N) { tre...原创 2019-08-11 21:34:47 · 160 阅读 · 0 评论 -
【模板】ST算法
ST算法适用范围:静态求区间最值 优点:简洁易写,速度、内存消耗优于线段树 缺点:适用范围小,无法更改区间值 注: a[]:原数组 log1[]:log1[i]表示log₂ i向下取整,则log1[i]=log1[i/2]+1 f[i][j]:从a[i]到a[i+2^j-1]这个范围内的最值 先求出整个区间的值: void build() { for (int i=1;i<=n;i...原创 2019-08-11 21:36:28 · 124 阅读 · 0 评论 -
【模板】二叉堆(手写堆)
定义一个堆: int heap[maxn] ; //存储堆 int len; //堆中元素个数 将一个数插入堆: 在堆中插入元素x 首先将元素x放到堆中的最后一个位置(即最底层最右边的位置),然后不断地把x往上调整,直到x调不动为止(即大于它现在的父亲,或者x处于根结点) void insert(int x) //将x放进堆 { heap[++len]=x; //把当前数...原创 2019-08-22 16:42:40 · 342 阅读 · 0 评论