常用算法实现模板
艾_Mi杰
算法很苦,坚持很酷!
展开
-
C++大数模板
const int MAXSIZE=1000;struct bign{ int len,s[MAXSIZE]; bool sign; bign() {memset(s,0,sizeof(s));len=1;sign=1;} bign(const char *num) {*this=num;} bign(int num) {*this=num;} string toStr() const { string res;原创 2021-04-22 10:43:50 · 180 阅读 · 0 评论 -
【Stoer_Wagner】算法学习
Stoer_Wagner算法用于求解全图最小割。复杂度为O(n3n^{3}n3),其思路为:1、 固定一个点P,定义mincut为inf。2、 从点P出发,类似Prim扩展出“最大生成树”(事实上不是最大生成树,我们把这个树命名为“XJB树”,这里的最大“边”是一种累加的权值)。注:3、 记录最后一次扩展的两点,将扩展的最后一点的割“边”与mincut比较取最小。4、 合并最后扩展的两点(最后一次扩展的点为t,倒数第二次扩展的点为s,将t合并到s中)。5、 回到第2步,合并n-1次,即只剩下两点原创 2020-10-19 12:56:45 · 1071 阅读 · 2 评论 -
【分块】算法学习
分块思想:对于一个长度为n的序列,我们可以将其中的元素分为M个连续的块,每块的长度自然就为N/M。同时记录每一块的左右端点。这样,在更新操作中,只需更新所属块区间即可。在【l,r】区间上查询时,可以有两种情况:一、【块1】【块2】……【块n】二、【l,块1的右端点】【块2】【块3】……【块n的左端点,r】建立分块常用变量:num 分块个数block 每一块内的元素个数belong...原创 2019-04-11 11:46:36 · 197 阅读 · 0 评论 -
【莫队】算法学习
莫队思想:莫队传说是一种解决一切区间问题的暴力算法,是一种基于分块的对于所有询问离线处理的算法。如果我们已知[l,r]的答案,就能在O(1)时间得到[l+1,r],[l-1,r],[l,r-1],[l,r+1]的答案。因此,我们需要对于所有询问进行排序。莫队实现:建立结构体:其中l表示询问区间左端点,r表示询问区间右端点,id记录询问输入顺序,在按照一定规则排序后用莫队算法处理,最后需要...原创 2019-04-12 18:58:10 · 110 阅读 · 0 评论 -
【简单并查集】算法学习
并查集思想:并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。通过并查集,可以有效降低这一类问题的时间和空间复杂度。并查集实现:一、并查集首先要定义一个数组f(也可以用结构体实现),用来储存i所在的集合。...原创 2019-04-21 15:57:26 · 135 阅读 · 0 评论 -
【带(加)权并查集】算法学习
带(加)权并查集思想:相比于简单的并查集,带权并查集中各个节点之间的关系更为复杂。带(加)权并查集实现:带(加)权并查集的实现同简单并查集并没有什么不用,但是带(加)权并查集的关系合并操作中会比多用到模除或者是异或操作,具体因题而异。例题:题目地址:食物链 POJ - 1182 解析:本题作为带(加)权并查集经典题目,代码中的合并操作在主函数中完成了。而且通过向量思维的解释,该...原创 2019-04-21 16:23:48 · 141 阅读 · 0 评论 -
【归并排序】算法学习
归并排序思想:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序实现:该算法需要两个数组来实现,一个数组储存原输入数组,另一个数组储存排序后的数组。定...原创 2019-04-28 21:29:17 · 119 阅读 · 0 评论