
模板
sjzezwzy
这个作者很懒,什么都没留下…
展开
-
【模板】负环
模板链接 时间:4148ms。#include<bits/stdc++.h>using namespace std;int T,ver[60001],nxt[6001],hed[6001],tot,bian[6001],dian[2001],bj[2001],jl[2001],n,m;void add(int x,int y,int z){ ver[++tot]=y...原创 2018-07-08 09:00:10 · 275 阅读 · 0 评论 -
二进制与bitset
一.基础位运算(以代码中的符号为准)运算符与(&)(and):1&1=1 0&1=0 1&0=0 0&0=0 或(|)(or):1|1=1 0|1=1 1|0=1 0|0=0 异或(^)(xor):1^1=0 0^1=1 1^0=1 0^0=0 非(!)(not): !1=0 !0=1逻辑移位...原创 2018-07-17 22:41:11 · 259 阅读 · 0 评论 -
中国剩余定理
什么是中国剩余定理中国剩余定理是中国古代求解一次同余式组的方法。是数论中一个重要定理。又称孙子定理。一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作《孙子算经》卷下第二十六题,叫做“物不知数”问题,原文如下: 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?即,一个整数除以三余二,除以五余三,除以七余二,求这个整数。《孙子算经》中首次提到了同余方程组问...原创 2018-07-11 22:37:07 · 863 阅读 · 0 评论 -
乘法逆元总结
部分内容参考李煜东《算法竞赛进阶指南》。定义:若已知a,b,若a*c%b=1,则称c是a关于b的逆元。应用范围:有理数取余,中国剩余定理,解同余方程等。求法:1.硬算 通过枚举来寻找逆元神一般的做法,一般没什么人用。 具体代码int py(int a,int b){ int c=1; while(1){ if(...原创 2018-07-11 21:41:43 · 227 阅读 · 0 评论 -
STL之vector
vector可理解为一个长度可变的数组,当其内存接近于满时,便会申请内存,当其删减内容时,则会释放内存,vector的内存是动态的。vector支持随机访问,可像数组一样进行访问,但一般只在末尾进行插入。 vector的声明#include<vector> 头文件vector<int> a 长度变化的int数组vector<int> ...原创 2018-07-09 21:01:30 · 164 阅读 · 0 评论 -
【模板】缩点
题目链接 对于这道题,可将其分为tarjan和记忆化搜索,tarjan负责缩点,记搜负责求最大值。 对于缩点(实际上感觉是搜索),其实是求有向图的强连通分量对此有一个结论:在x回溯前,若low[x]=dfn[x],则从x到栈顶的所有节点构成强连通分量,对于缩完点后的点值,用缩点前的点值相加即可 对于求最大值,实际上就是一个简单记搜,不再说了 时间:60ms。#include<...原创 2018-07-09 11:26:08 · 1162 阅读 · 0 评论 -
高精(加减乘除)
高精,实际上使用数组模拟我们小学时列竖式的过程,所以当不会写时用python,列竖式的来想怎么解决。 高精加#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){ int a2[...原创 2018-07-09 11:09:14 · 391 阅读 · 0 评论 -
【模板】最小生成树
题目链接 最小生成树一般是利用贪心的克鲁斯卡尔算法Prim不会写,克鲁斯卡尔是一个离线算法,首先将边读入,按边值排序,再从小往大加边,若两个端点在一起了,则不加,否则加,直至加了n-1条边,若不行,则无最小生成树。 时间:500ms。#include&amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;gt;#include&amp;amp;amp;amp;amp;lt;cstdio&a原创 2018-07-17 08:29:53 · 224 阅读 · 0 评论 -
【模板】线性筛素数
题目 线性筛,即在O(n)的时间里处理出素数及合数的最小质因子,对空间有一定要求,大约可处理1~6e6的素数,对于更大的素数,我们有Pollard’s Rho算法进行处理,下面来说一下线性筛的过程。 prime:记录素数 v:记录最小质因子 首先,从2开始筛,当遇见一个数时,若其v值为0,则此数是素数放进prime数组中,v值为其本身,后对质因子大于这个数且模这个数为零的数进行修改;当v值...原创 2018-07-09 10:09:18 · 206 阅读 · 0 评论 -
【模板】割点(割顶)
题目链接 用tarjan的裸题,对于一个点,设其子节点中一个节点y,当且仅当dfn[x]≤low[y]时为割点,特别的,对于根节点,要有两个y满足要求。 时间:100ms。#include<bits/stdc++.h>using namespace std;int ans=0,cut[1000010],hed[1000010],nxt[2000010],ver[1000...原创 2018-07-09 09:42:32 · 171 阅读 · 0 评论 -
【模板】st表
题目 ST表经典题——静态区间最大值 方法是设f[i,j]表示从i开始2^j个数中的最大值,在读入数据后可先处理出来,方便以后O(1)查询,转移方程f[j][i]=max(f[j][i-1],f[j+(1<<(i-1))][i-1]); 时间:1200ms。#include<bits/stdc++.h>using namespace std;int f[1...原创 2018-07-08 17:08:25 · 983 阅读 · 1 评论 -
【模板】树链剖分
题目 时间:1200ms。#include&amp;lt;bits/stdc++.h&amp;gt;using namespace std;long long n,m,p,r,ver[200001],nxt[200001],hed[100001],tot=0,al[200001],f[100001],d[100001],rk[200001],id[200001],size[100001],top[1...原创 2018-07-08 16:49:32 · 146 阅读 · 0 评论 -
Miller–Rabin素数检测法
感觉这就是一个多次随机的算法……算法嗯,随机大法好,在一般判断素数中主要有这几种:暴力枚举判断法(判断一个:O(√n)),杜氏筛(O(nloglogn),欧拉筛(n)等,这里说一个随机筛法:Miller–Rabin,这玩意主要靠两条定理,一是费马小定理,二是二次探测定理,以下说一下算法流程: 对于一个p来说, 1.随即去一个a。 2.若a^(p-1)%p!=1,则这是一个合数,退出 ...原创 2018-07-01 22:38:01 · 665 阅读 · 0 评论 -
Pollard’s Rho算法
对于质因数分解,我们一般有试除法,欧拉筛等,但对于大于1e13的数来说,内存显然是不够的,所以这就让人很是苦恼,还好,有一个随机算法:Pollard’s Rho算法 解释:,要分解n,对于两个整数x,y来说,是n约数的几率很小,但是他们的差是n约数的几率还是有的,并且x,y还是一直在变得,所以只要计算的多了,有很大几率得到n的约数,对于x,y,一般令x1=y1,然后xn=(x(n-1)+c)%m...原创 2018-07-04 11:49:02 · 1644 阅读 · 1 评论 -
LCA的几种常见求法
LCA算是OI中比较有用的算法了,下面来介绍LCA的三种大众求法。暴力寻找法这种是将一个点到根节点上所有的点都标记上,然后,有另一个点想根节点找,第一个有标记的便是LCA。这种的时间复杂度为O(n^2),算是比较慢的了。 上代码#include&amp;amp;lt;bits/stdc++.h&amp;amp;gt;using namespace std;int n,m,s,ver[1000001],hed...原创 2018-07-06 23:23:34 · 2014 阅读 · 0 评论 -
【模板】并查集
题目链接 时间:850ms。#include&amp;lt;bits/stdc++.h&amp;gt;using namespace std;int a,b,c,i,n,m;int f[10010];int find(int a){ if(f[a]==a) return a; return f[a]=find(f[a]);}int main(){ sc...原创 2018-07-08 09:03:55 · 162 阅读 · 0 评论 -
【模板】线性基
感觉这玩意和暴力差不多,就是优化优化而已……线性基我们实际在读入时就对其进行处理,我们定义f数组表示第i位是1的数中最先出现的且最高为是i的数字,若是,对f判断,若f[i]是0,则f[i]=n,否则将其^,然后继续找。 上代码,感觉这玩意自己打一遍就会了#include<bits/stdc++.h>#define ll long longusing namespa...原创 2018-09-13 19:31:24 · 176 阅读 · 0 评论