
算法模板
Arlia
老年人记性不好
展开
-
SPFA的优化
SPFA的优化今天打比赛被朴素的SPFA判环卡了,超时丢了30= = 然而在bzoj上是AC的优化:Orange大佬:SLF和LLL优化递归优化(剪枝)递归优化就是把朴素的SPFA换成了DFS版(一般用于需要判环的情况)注意disdisdis数组要初始化代码#include<iostream>#include<cstdio>#...原创 2018-07-10 11:36:10 · 705 阅读 · 0 评论 -
最短路算法
Dijkstravoid dij(ll s){ for(ll i=1;i&lt;N;i++)dis[i]=1e9; dis[s]=0; priority_queue&lt;node&gt;q; q.push((node){s,0}); while(!q.empty()){ ll u=q.top().id;q.pop(); ...原创 2018-06-24 08:14:03 · 341 阅读 · 0 评论 -
差分与树上差分
差分与树上差分差分必须离线。O(1)修改,O(n)求和,O(1)查询[L,R]区间整体加上d:w[L]+=d, w[R+1]-=dA数组为修改后的数组,有A[i]=A[i-1]+w[i]树上差分点权求和:若[x,y]两点之间路径上的所有点的权值+d,则w[x]+=d , w[y]+=d , w[LCA(x,y)]-=d , w[Fa[LCA(x,y)]]-=d边...原创 2018-06-17 18:42:55 · 898 阅读 · 0 评论 -
LCA 倍增+O(1)
LCA 倍增算法时间复杂度为O(NlogN)O(NlogN)O(NlogN)的在线算法Dep[v]Dep[v]Dep[v]记录节点vvv的深度,Fa[v][k]Fa[v][k]Fa[v][k]记录vvv向上第2k2k2^k个祖先的编号代码#include&amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;gt;#include&amp;amp;amp;amp;amp;lt;cstd原创 2018-06-10 18:31:15 · 1184 阅读 · 0 评论 -
Sparse Table [RMQ]
Sparse Table [RMQ]预处理时间复杂度O(NlogN)O(NlogN)O(NlogN),查询时间复杂度O(1)O(1)O(1)。很优秀。f[i][j]f[i][j]f[i][j]表示[i,i+2^(j-1)]区间中的最大/最小值。方程:f[i][j]=min(f[i][j-1],f[i+2^(j-1)][j-1])代码#include<iostream&...原创 2018-06-10 18:23:31 · 253 阅读 · 0 评论 -
判环的方法
判环的方法SPFA O(n*n)(n为点数)拓扑排序 可以有重边 O(n)Tarjan 实质上也是拓扑排序有待完善原创 2018-05-20 13:25:25 · 1219 阅读 · 0 评论 -
NlogN最长上升子序列
NlogN最长上升子序列首先感谢newuser大佬的耐心解说其次放一篇解说非常详尽的博客概括着来说,就是开一个数组f,f[i]表示长度为i的最长上升子序列的末尾的最小数字(使得后面能够选到的更大的数字尽可能多)。而正由于f[i]表示的是最小末尾,所以f数组是单调的(至于是否严格单调就要看题目要求了)。有了单调这个性质,就可以通过二分查找(或lower_bound)来找里面的数字。具体看...原创 2018-05-18 23:14:32 · 607 阅读 · 0 评论 -
BKDR Hash
int BKDR(char s[20]){ int seed=131; int Hash=0,i=0,Len=strlen(s); while(i<Len)Hash=Hash*seed+str[i++]; return (Hash%Max);//保证Hash值在[0,Max)之间}原创 2018-05-17 13:53:02 · 313 阅读 · 0 评论 -
康托展开
来自newuser的链接:康托展开+逆康托展开原创 2018-05-16 19:44:15 · 193 阅读 · 0 评论 -
初级数论
朴素欧几里得用途:求公约数//手写版int gcd(int a,int b){ if(b==0)return a; return gcd(b,a%b);}//系统函数版int ans=__gcd(a,b);扩展欧几里得用途:解不定方程ax+by==gcd(a,b)的一组整数解int exgcd(int a,int b,int &amp;amp;...原创 2018-05-16 17:56:22 · 369 阅读 · 0 评论 -
多叉树转二叉树
多叉树转二叉树int x,y;scanf("%d%d",&x,&y);//x->yRson[y]=Lson[x];Lson[x]=y;原创 2018-05-16 17:52:12 · 812 阅读 · 0 评论 -
Trie
Trievoid Ins(char s[12]){ int p=0,len=strlen(s); for(int i=0;i<len;i++){ int c=s[i]-'a'; if(!trie[p].son[c])trie[p].son[c]=++tot; p=trie[p].son[c]; } if(...原创 2018-05-14 19:48:10 · 162 阅读 · 0 评论 -
KMP
KMP注意:Fail[1]=0(代码中的字符数组下标从1开始)Fail数组有两个性质:①有关循环节:对于一个长度为Len的字符串,它的循环节长度是Len-Fail[Len](数组下标从1开始);如果Len%(Len-Fail[Len])!=0,就没有循环节。②有关树:如果把所有的Fail值连上边,那么所构成的图是一棵树。bool KMP(int s,int e,int id...原创 2018-05-14 19:45:23 · 206 阅读 · 0 评论 -
最小表示法
最小表示法把一个字符串连成一圈,这一圈字符串中字典序最小的那一个就是该字符串的最小表示法。如BCDA的最小表示法就是ABCD。int Get(){ int i,j; for(i=0,j=1;i&amp;lt;l &amp;amp;&amp;amp; j&amp;lt;l;){ int k; for(k=0;k&amp;lt;l;k++) if原创 2018-05-14 19:38:34 · 212 阅读 · 0 评论 -
马拉车
马拉车找回文串的算法void Mana(int n){ Init(n); int len=n*2+1; int Ans=0,Ansp=0,p=0,pos=0; for(int i=1;i<=len;i++){ if(i<pos)R[i]=min(R[p*2-i],pos-i+1); else R[i]=1; ...原创 2018-05-14 19:30:38 · 432 阅读 · 0 评论 -
AC自动机
AC自动机注意:Root不要设为0号点(我也不知道为什么,反正过不了样例,大概是我的写法不能将0号点作为根)#include<cstdio>#include<cstring>#include<iostream>#include<queue>using namespace std;char Mode[1000010];int tot,...原创 2018-05-14 19:23:21 · 133 阅读 · 0 评论 -
树剖
树剖只是想来放一波代码= =单点修改+区间求和+区间最大值区间修改就在线段树上加个Lazy操作就可以了#include&lt;iostream&gt; #include&lt;cstdio&gt; #define N 300000 #define ll long long using namespace std; ll maxxx=0; ll V[N]; ll L...原创 2018-04-14 07:15:43 · 307 阅读 · 0 评论 -
图的连通性【模板】
图的连通性【模板】强连通分量【有向图】强连通图:图G中任意两点之间都有可以到达的路径强连通分量:有向图G的最大连通子图最大连通子图:该子图是G的强连通子图,且将G中的任意一个不在该图中的点加入该子图中该子图将不再连通。stack&lt;int&gt;s;void Tarjan(int u){ Time++; Dfn[u]=Time,Low[u]=Tim...原创 2018-04-13 19:40:14 · 530 阅读 · 0 评论 -
二分法
二分答案就是缩小上界和下界的范围,取中间点作为答案(把答案作为已知条件),看该答案是否满足要求。模板:二分整数答案int L,R;//上界和下界while(L//有时候可能是L+1 int mid=(L+R)/2; if(OK(mid))R=mid-1; else L=mid+1;}printf("%d",L);二分实数答案dou原创 2018-02-02 11:46:57 · 269 阅读 · 0 评论 -
匈牙利算法
其实还可以用存边,只需要在以下代码中修改一点点(可是我不会→_→)//map[i][j] 存图//road[i] 标记i点是否是未盖点//link[i] 记录增广路上与i相连的前一个点,即已求出的匹配 bool Find(int v){//查找从v点出发是否有增广路 for(int i=1;i<=n;i++){//n为上层节点数 if(map[v][i] && (!原创 2017-07-15 22:29:04 · 284 阅读 · 0 评论