随笔分类 -  模板

摘要:一.普通并查集 二.带权并查集 http://cogs.pro/cogs/problem/problem.php?pid=298 阅读全文
posted @ 2017-08-14 11:48 Bennettz 阅读(157) 评论(0) 推荐(0)
摘要:应用范围 对于区间内每一组修改,如果修改范围是连续的,并且非在线,基于这种特性,我们可以用差分序列 方法 用一个数组a记录每位和前一位的差,区间修改时就对数组a的区间首端加上x,再在区间末端+1处减去x,最终用前缀和数组加以统计,就可以得出所需的值。 例题 http://cogs.pro/cogs/ 阅读全文
posted @ 2017-08-02 18:21 Bennettz 阅读(2195) 评论(0) 推荐(0)
摘要:#include #include using namespace std; inline void in(int &x){ char c;x=0; do c=getchar(); while (c'9'); while (c>='0'&&c>1; if (a[mid]>1; if (a[mid]<=x)l = mid+1; ... 阅读全文
posted @ 2017-07-17 11:52 Bennettz 阅读(141) 评论(0) 推荐(0)
摘要:普通筛 线性筛 每个合数除1外最小的因数一定是素数,只利用这个素数筛没有重复 例题POJ3292 Semi-prime H-numbers(线性筛素数变形) 阅读全文
posted @ 2017-05-23 20:42 Bennettz 阅读(178) 评论(0) 推荐(0)
摘要:求割点 DFS搜索树:用DFS对图进行遍历时,按照遍历次序的不同,我们可以得到一棵DFS搜索树。 树边:(称为父子边),可理解为在DFS过程中访问未访问节点时所经过的边。 回边:(返祖边、后向边),可理解为在DFS过程中遇到已访问节点时所经过的边。 该算法是R.Tarjan发明的。观察DFS搜索树, 阅读全文
posted @ 2017-05-19 21:03 Bennettz 阅读(229) 评论(0) 推荐(0)
摘要:c为树状数组,c[i]存储i-lowbit[i]+1到i的数组的值 c[x+ lowbit(x)]为c[x]的父亲节点 http://cogs.pro/cogs/problem/problem.php?pid=264 阅读全文
posted @ 2017-05-17 21:44 Bennettz 阅读(145) 评论(0) 推荐(0)
摘要:Kruskal算法 Kruskal算法是基于贪心的思想得到的。首先我们把所有的边按照权值先从小到大排列,接着按照顺序选取每条边,如果这条边的两个端点不属于同一集合,那么就将它们合并,直到所有的点都属于同一个集合为止。 http://cogs.pro/cogs/problem/problem.php? 阅读全文
posted @ 2017-05-16 21:24 Bennettz 阅读(200) 评论(0) 推荐(0)
摘要:定义:在一个图中,我们选取一些点构成集合,记为V,且集合中的出边(即集合中的点的向外连出的弧),所指向的终点(弧头)也在V中,则我们称V为闭合图。最大权闭合图即在所有闭合图中,集合中点的权值之和最大的V,我们称V为最大权闭合图。 做法:首先我们将其转化为一个网络(现在不要问为什么,接下来会证明用网络 阅读全文
posted @ 2017-04-21 22:02 Bennettz 阅读(272) 评论(0) 推荐(0)
摘要:Dinic算法的基本思路: 根据残量网络计算层次图。 在层次图中使用DFS进行增广直到不存在增广路 重复以上步骤直到无法增广 用BFS建立分层图 注意:分层图是以当前图为基础建立的,所以要重复建立分层图 用DFS的方法寻找一条由源点到汇点的路径,获得这条路径的流量I 根据这条路径修改整个图,将所经之处正向边流量减少I,反向边流量增加I,注意I是非负数 重复步骤2,直到DFS找不到新的路... 阅读全文
posted @ 2017-04-20 19:11 Bennettz 阅读(210) 评论(0) 推荐(0)
摘要:使用STL算法离散化:思路:先排序,再删除重复元素,然后就是索引元素离散化后对应的值。假定待离散化的序列为a[n],b[n]是序列a[n]的一个副本,则对应以上三步为: unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),unique 阅读全文
posted @ 2017-04-20 09:34 Bennettz 阅读(270) 评论(0) 推荐(0)
摘要:转载自http://blog.csdn.net/pi9nc/article/details/11848327 二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为两个不相交集 U 和 V ,使得每一条边都分别连接U 、 V 中的 阅读全文
posted @ 2017-04-19 08:10 Bennettz 阅读(185) 评论(0) 推荐(0)
摘要:算法一:暴力枚举 阅读全文
posted @ 2017-04-18 20:22 Bennettz 阅读(839) 评论(0) 推荐(0)
摘要:①先取一点v[0]作为起始点,初始化dis[i],d[i]的值为v[0]到其余点v[i]的距离w[0][i],如果直接相邻初始化为权值,否则初始化为无限大; ②将v[0]标记,vis[0] = 1(vis一开始初始化为0); ③找寻与v[0]相邻的最近点v[k],将v[k]点记录下来,v[k]与v[ 阅读全文
posted @ 2017-04-18 11:01 Bennettz 阅读(232) 评论(0) 推荐(0)
摘要:Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规划最富创造力的精华所在) 从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点 阅读全文
posted @ 2017-04-18 09:17 Bennettz 阅读(190) 评论(0) 推荐(0)
摘要:递归的本质是通过栈来保存状态,然后再次调用自己进入新的状态,然后函数返回的时候回到上次保存的状态。 如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。尾递归函数的特点是在 阅读全文
posted @ 2017-04-18 08:33 Bennettz 阅读(1735) 评论(0) 推荐(0)
摘要:定义:将有向图中的顶点以线性方式进行排序。即对于任何连接自顶点u到顶点v的有向边uv,在最后的排序结果中,顶点u总是在顶点v的前面。 前提条件: 必须是有向无环图(可以不连通) 偏序/全序关系: 所谓偏序,就是图中没有环(自己出发不能回到自己) 所谓全序,就是在偏序的基础之上,有向无环图中的任意一对 阅读全文
posted @ 2017-04-17 21:25 Bennettz 阅读(240) 评论(0) 推荐(0)
摘要:适用条件&范围: 单源最短路径(从源点s到其它所有顶点v); 有向图&无向图(无向图可以看作(u,v),(v,u)同属于边集E的有向图); 边权可正可负(如有负权回路输出错误提示); 差分约束系统; Bellman-Ford算法寻找单源最短路径的时间复杂度为O(V*E). 首先介绍一下松弛计算。如下 阅读全文
posted @ 2017-04-17 09:19 Bennettz 阅读(207) 评论(0) 推荐(0)
摘要:O(1)快速乘来自骆可强:《论程序底层优化的一些方法与技巧》 阅读全文
posted @ 2017-04-07 14:43 Bennettz 阅读(1772) 评论(0) 推荐(1)
摘要:题目 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。 基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状 阅读全文
posted @ 2017-03-13 20:35 Bennettz 阅读(185) 评论(0) 推荐(0)
摘要:定义状态 F[i][j]表示以a串的前i个整数与b串的前j个整数且以b[j]为结尾构成的LCIS的长度。 状态转移方程: ①F[i][j] = F[i-1][j] (a[i] != b[j]) ②F[i][j] = max(F[i-1][k]+1) (1 <= k <= j-1 && b[j] > 阅读全文
posted @ 2017-03-11 11:11 Bennettz 阅读(205) 评论(0) 推荐(0)