随笔分类 - 模板
摘要:对于某些数据范围很大,但是分布却非常稀疏的题目,直接用数组存非常浪费空间,而且很可能会炸,于是要用到离散化这样的技巧; 其实这名字似乎很高大上,算法实现并不难,只是对数据排个序,去重,然后在其余代码部分用这个数的编号代替这个数就可以了; 实现排序和去重起来有很多种方法,用STL会更简单一些; 方法一
阅读全文
摘要:一、埃拉托斯特尼筛法 名字很高大上,然而并没有什么卵用…… 思路: 在把<=√n的质数所有的<=n的倍数剔除,剩下的就都是质数了,很容易理解…… 复杂度O(nloglogn) 二、欧拉筛 上一个筛法似乎复杂度不大,但是遇到107规模的数据就会炸,主要是因为一个数会被不同的质数筛好几遍,欧拉筛保证一个
阅读全文
摘要:有关概念: 最长公共上升子序列(LCIS),两个或者两个以上序列的所有共同上升子序列最长的一个(又好像和没解释没什么区别) 思路: 对于两个序列a,b f[i][j]表示a序列中1..i的部分和b序列中1...j的部分的LCIS 那么易得,对于f[i][j]: (1)如果ai!=bj,则直接将f[i
阅读全文
摘要:有关概念: 最长公共子序列(LCS,Longest Common Subsequence),两个或者两个以上序列的所有共同子序列最长的一个(好像和没解释没什么区别) 思路: 对于两个序列a,b f[i][j]表示a序列中1..i的部分和b序列中1...j的部分的LCS 那么易得,对于f[i][j]:
阅读全文
摘要:有关概念: 最长上升子序列(LIS,Longest Increasing Subsequence),在一个序列中最长的单调递增的子序列 思路: 求LIS通常有O(n2)和O(nlogn)两种算法 (1)O(n2)算法 fi表示以第i个数结尾的LIS长度 对于序列中的一个数i,在i前面枚举数j,j满足
阅读全文
摘要:有关概念: 最近公共祖先(LCA,Lowest Common Ancestors):对于有根树T的两个结点u、v,最近公共祖先表示u和v的深度最大的共同祖先。 树上倍增是求LCA的在线算法(对于每一个询问输入后即计算) 思路: fa[i][j]表示编号为j的结点从下往上的第2i个祖先 即fa[0][
阅读全文
摘要:有关概念: 二分图:图G中的点集可以分为两个互不相交的子集,且G中的每条边连接的两个点分别属于这两个子集 二分图匹配:二分图G的子图M中每个结点上只连一条边,则称M为一个匹配 极大匹配:无法再向二分图中加边且满足匹配条件的匹配 最大匹配:所有极大匹配中边数最多的一个 增广路:若P为图G上连接两个未匹
阅读全文
摘要:有关概念: 最小生成树:在连通图G中,连接图G所有顶点且总权最小的边构成的树 思路: 首先对边按权从小到大排序,紧接着枚举每一条边,如果两个结点的祖先结点不同(并查集),则连上此边,直到边数等于结点数-1即可 邻接矩阵输入,用类邻接表存储方式存边 1 #include<cstdio> 2 #incl
阅读全文
摘要:有关概念: 如果图中两个结点可以相互通达,则称两个结点强连通。 如果有向图G的每两个结点都强连通,称G是一个强连通图。 有向图的极大强连通子图(没有被其他强连通子图包含),称为强连通分量。(这个定义在百科上和别的大神的博客中不太一样,暂且采用百科上的定义) Tarjan算法的功能就是求有向图中的强连
阅读全文
摘要:有关概念: 最短路问题:若在图中的每一条边都有对应的权值,求从一点到另一点之间权值和最小的路径 SPFA算法的功能是求固定起点到图中其余各点的的最短路(单源最短路径) 约定:图中不存在负权环,用邻接表存储有向图,di存放从起点到结点i的最短路,q为队列,保存待处理节点 思路: 首先指定起点入队,取当
阅读全文
摘要:有关概念: 最近公共祖先(LCA,Lowest Common Ancestors):对于有根树T的两个结点u、v,最近公共祖先表示u和v的深度最大的共同祖先。 Tarjan是求LCA的离线算法(先存储所有询问,再进行运算) 思路: 从根结点开始DFS,对遍历到的结点u标记已访问,创建新集合,元素为u
阅读全文

浙公网安备 33010602011771号