随笔分类 -  模板

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