![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
信息学
fcdljh
这个作者很懒,什么都没留下…
展开
-
01背包&完全背包
动态规划——背包01背包原始二维数组代码:#include using namespace std;int v[100000],w[10000];int a[1000];int main(){ int i,j,n,m; cin>>n>>m; for(i=0;i<m;i++)a[i]=0; for(i=1;i<=n;i++) cin>...原创 2017-03-07 20:17:10 · 205 阅读 · 0 评论 -
最短路径学习
【1】SPFA算法void spfa(){ memset(vis,0,sizeof(vis)); memset(dis,120,sizeof(dis)); queue<int>q; q.push(s); dis[s]=0,vis[s]=true; while(!q.empty()){ int u=q.front(); ...原创 2018-03-21 10:26:57 · 268 阅读 · 0 评论 -
最小生成树学习
MST(Minimum Spanning Tree,最小生成树)问题有两种通用的解法, ①Prim算法 ②Kruskal算法(一)Prim算法【算法理解】 它是从点的方面考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的...转载 2018-03-21 10:09:39 · 188 阅读 · 0 评论 -
线段树总结
综述: 线段树可谓解决区间问题的神兵利器,其稳定的O(n*log(n))的优秀时间复杂度适应了OI和ACM竞赛的一般需求,而且代码简介,功能丰富,使用灵活。经过一段时间对线段树由浅入深的了解,笔者越发感受到这个数据结构的强大魅力。虽然有关介绍线段树的文章很多,其中不乏优秀作品,但是毕竟再好看也是别人的东西,只有消化吸收了才能为己所用。所以,笔者还是决定自己写一份关于线段树的总结,可...转载 2018-03-21 09:52:35 · 122 阅读 · 0 评论 -
一般图最大匹配——带花树算法
问题对于一个图G(V,E),它的匹配M是二元组(u,v)组成的集合,其中u,v∈V,(u,v)∈E,并且M中不存在重复的点。当|M|最大的时候,我们称M为G的最大匹配。当G是一个二分图的时候,它的最大匹配可以用经典的匈牙利算法或网络流算法求解。然而当G是一个一般的图时,直接进行增广就变得不可行了,例如下面这个例子(论文中的图):这个问题出现的原因,就是一个一般图中会含有奇环,即一个点数为2k+1,...转载 2018-03-21 09:48:58 · 488 阅读 · 0 评论 -
二分图最大匹配——匈牙利算法
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。-------等等,看得头大?那么请看下面的版本:通过数代人的努力,你终于赶上了剩男剩女的大潮,假设你是一位光荣的新世纪媒人,在你的手上有N个剩男,M个剩女,每个人都可能对多名异性有好感...转载 2018-03-21 09:47:02 · 130 阅读 · 0 评论 -
tarjan算法学习
“tarjan陪伴强联通分量生成树完成后思路才闪光欧拉跑过的七桥古塘让你 心驰神往”----《膜你抄》一、tarjan求强连通分量1、什么是强连通分量?“有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个...转载 2018-03-21 09:44:22 · 159 阅读 · 0 评论 -
扩展欧几里得
定义:扩展欧几里得算法是用于解决一类形如求解a*x+b*y=c中(x,y),或者形如a*x≡b(mod c)中x的问题。引理(裴蜀定理):不定方程a*x+b*y=gcd(a,b)(x,y为变量)一定有无数个解。证明:先证明该方程有解。将欧几里得算法倒推上去。因为欧几里得算法总会结束,所以方程一定有解。设a=b*p+q(0<=q<b),则gcd(a,b)=gcd(b,q)。设b*x'+q...原创 2018-03-21 09:32:11 · 144 阅读 · 0 评论 -
AC自动机学习
蒟蒻最近想学个AC自动机简直被网上的板子搞疯了,随便点开一个都是带指针的,然而平时用到指针的时候并不多,看到这些代码也完全是看不懂的状态。只好在大概理解后自己脑补(yy)了一下AC自动机的代码,居然还过了,这里对学到的东西做一点小小的总结。顺便造福一下跟我之前一样没有学过AC自动机并且不会用指针的Oier,给出一段不带指针的板子。【算法理解】 AC自动机的模型很好理解,就是在Trie树...转载 2018-03-21 09:27:46 · 131 阅读 · 0 评论 -
KMP算法学习
【算法理解】 这个程序的算法是相当“朴素”的:变量k是在字符串s中搜索t的起点,用指针i与j分别在s与t中扫描,逐一比较s[i]与t[j]是否相同。若遇到不相同的情况,则将起点k在s中后移一个字符,继续搜索。客观地讲,在两个字符串都不很长的情况下,这个算法的执行效率还是可以的。 但在某些特殊情况下,这个算法的效率问题就会显现出来,它最大的问题就在于:当出现s[i]...原创 2018-03-21 09:22:36 · 93 阅读 · 0 评论 -
平衡树Splay学习
Splay平衡树模板:变量声明:f[i]表示i的父结点,ch[i][0]表示i的左儿子,ch[i][1]表示i的右儿子,key[i]表示i的关键字(即结点i代表的那个数字),cnt[i]表示i结点的关键字出现的次数(相当于权值),size[i]表示包括i的这个子树的大小;sz为整棵树的大小,root为整棵树的根。再介绍几个基本操作:【clear操作】:将当前点的各项值都清0(用于删除之后)void...转载 2018-03-21 09:18:31 · 208 阅读 · 0 评论 -
组合数取模
组合数取模及Lucas定理引入:组合数C(m,n)表示在m个不同的元素中取出n个元素(不要求有序),产生的方案数。定义式:C(m,n)=m!/(n!*(m-n)!)(并不会使用LaTex QAQ)。根据题目中对组合数的需要,有不同的计算方法。(1)在模k的意义下求出C(i,j)(1≤j≤i≤n)共n2 (数量级)个组合数:运用一个数学上的组合恒等式(OI中称之为杨辉三角):C(m,n)=C(m-1...转载 2018-03-22 21:08:46 · 417 阅读 · 0 评论 -
乘法逆元学习
逆元【1】定义:逆元指在某种运算中,对一个数a进行逆运算可以等价为对一个数b进行原运算,此时称a与b互为逆元。本文中的逆元均指模算术中的乘法逆元,即对于一个数a,如果存在b满足a*b≡1(mod p),则称a与b在模p意义下互为逆元。由于同余的性质,我们在进行模算术除法时不能简单地除一个数,而应该乘该数的逆元。【2】求法: (1)单点逆元 a*b≡1(mod p)等价于p|a*...转载 2018-03-22 21:04:12 · 569 阅读 · 0 评论