随笔分类 - 模板
摘要:题目描述: The Sum of the k th Powers time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output There a
阅读全文
摘要:KM(Kuhn Munkres)算法求带权二分图的最佳匹配 相关概念 这个算法个人觉得一开始时有点难以理解它的一些概念,特别是新定义出来的,因为不知道是干嘛用的。但是,在了解了算法的执行过程和原理后,这些概念的意义和背后的作用就渐渐的显示出来了。因此,先暂时把相关概念列出来,看看,有个大概印象就好,
阅读全文
摘要:二分图匹配 相关概念 无向二分图$G(U\bigcup V,E)$ :U是一个顶点集合,V是另一个顶点集合,对于一个集合内的点无边直接相连,而对于不同集合的点可以连边,即$(u,v)\in E$。 匹配 :两两不含公共端点的边的集合M称为匹配(就是两个集合之间连的边,只不过不同边的端点不能重合) 最
阅读全文
摘要:点分治模板 点分治: 这里统一地,只讲一下主要思想,各种细节留给 参考文章 。 点分治的主要是处理树上的路径问题,如果用暴力做法求解会有很高的时间复杂度$O(n^2) O(n^3)$的样子。而如果使用点分治,就可以将复杂度降为$O(nlog_2n)$。主要思路是将一棵树分解成若干子树,在分解成子树的
阅读全文
摘要:倍增法求lca(最近公共祖先) 基本上每篇博客都会有参考文章,一是弥补不足,二是这本身也是我学习过程中找到的觉得好的资料 思路: 大致上算法的思路是这样发展来的。 想到求两个结点的最小公共祖先,我们可以先把两个的深度提到同一水平,在一步一步往上跳,直到两个结点有了一个公共祖先,依照算法流程,这就是l
阅读全文
摘要:Tarjan算法分解强连通分量 算法思路: 算法通过dfs遍历整个连通分量,并在遍历过程中给每个点打上两个记号:一个是时间戳,即首次访问到节点i的时刻,另一个是节点u的某一个祖先被访问的最早时刻。 时间戳用DFN数组存储,最早祖先用low数组来存,每次dfs遍历到一个节点u,即让这两个记号等于当前时
阅读全文
摘要:链式前向星 在之前先来看一下边集数组。 边集数组是图的表示法的一种,前向星是边集数组的一种,链式前向星是前向星的一种。 前向星 前向星是把边的起点从小到大排序,起点一样按同样的规则排终点。所以前向星使用之前要$O(nlog_2n)$排序一下。 使用两个数组,一个head,head[i]记录以i为起点
阅读全文
摘要:初学网络流 这个主题以前没接触过,觉得有点抽象,算法有点不太清楚,看了一些博客,下面,对这些博客做些总结。 引入: 具体参考这篇博客的背景知识讲解部分(具体到代码之前),首先对网络流有了一个初步的印象 https://blog.csdn.net/wzw1376124061/article/detai
阅读全文
摘要:输入输出优化: 最近遇到一个题,照我的思路差100ms才能过,于是想尽一切办法做微小优化试图卡过去,最后虽然过去了,但要是会优化输入就更好了,于是学习一下这个模板备用 以下模板,具体讲解参考参考文章 代码: 参考文章: Felix Lee,C++ 读入优化与输出优化 模板,https://blog.
阅读全文
摘要:原理: 有好的博客做讲解了(见参考文章),这里暂时略过,如果以后有新的理解和体会会再来写的。~~(应该不会)~~ 思想: 这里可以把树状数组的精妙之处提一下(我理解的) 首先,树状数组之所以叫树状数组,因为它像树一样,有类似树的父子节点关系,这点在更新和求和操作上体现的最为明显。而最终也只是数组,因
阅读全文
摘要:方法概述: 算法1:暴力枚举所有连续子列和,算其中最大的。复杂度$O(n^3)$。 算法2:为算法1的优化,去掉内层求连续和的循环,在之前遍历数组,预处理出前缀和,方便在$O(1)$内算出连续子列和。复杂度$O(n^2)$。 算法3:分治法,当前处理区间的连续和等于左边最大连续和与右边连续和与跨区间
阅读全文
摘要:思路:见参考文章(原理我是写不粗来了) 代码: 用到了快速幂,米勒罗宾素性检验。 其他分解质因数的方法: 朴素算法:枚举从2到n找n的因子,找到了就不断除,除到不能除为止,再找下一个因子。 为什么保证是素因子,从二开始,假设有二的因子,不断地除直到没有二就能保证二的倍数也没有了。类似于素数筛的思想。
阅读全文
摘要:适用范围:较大数的较快素性判断 思路: 因为有好的文章讲解具体原理(见参考文章),这里只是把代码的大致思路点一下,读完了文章如果还有些迷糊,可以参考以下解释 原理是费马小定理:如果p是素数,则a^(p-1)%p==1,加上二次探测定理:如果p是一个素数,则x^2%p==1的解为,则x=1或者x=n-
阅读全文
摘要:快速幂: 计算a^n%p的值,怎么算呢?直接算当然可能溢出。我们有一条引理:(a*b)%p=((a%p)*(b%p))%p.在这个引理上进行指数上的合并从而得到快速幂算法。 具体地,有两种思路,一种是减小a值,以防溢出,一种是减小b值,加快计算。 怎么减小a值?a=a%p,就把a的值降到了p以下。对
阅读全文
摘要:思想: 先用字符串来读入大整数,然后用数组来存储大整数。与上一篇的所讲思路不同的是,这次是数组的每一个元素对应大整数的一个数,从而模拟手算过程。 主要实现思路与手算无太大差别。主要是一些细节上。 统一做个说明:模拟大数的数组的第零个元素保存的是数字个数(不包括第零个元素),而且数组从1到尾分别存大数
阅读全文
摘要:思想: 由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算。大数运算主要有加、减、乘三种方法。 考虑用数组存储整数,并模拟手算的方法进行加减乘除四则运算。为了能像int一样方便的使用大整数,可以定义结构
阅读全文
摘要:子集生成算法: 给定一个集合,枚举所有可能的子集。暂时讨论没有重复元素的情况。 1 增量构造法 一次选出一个元素放到集合中,和前面不同,由于A中的元素个数不确定,每次递归都要输出当前集合。另外递归边界也不需要显式确定-如无法添加元素,就不会递归了。 注意:定序,规定集合A的所有元素的编号从小到大排列
阅读全文
摘要:想不想打印所有排列? 输入整数n,按字典序从小到大输出前n个数的所有排列。 1 生成1~n的排列 伪代码: 下面考虑程序实现。用数组A表示序列A,集合S 不用保存,因为它可以有序列A 完全确定-A中没有出现的元素都可以选。 代码: 循环变量i是当前考察的A[cur],上面的程序用到了一个标志变量ok
阅读全文

浙公网安备 33010602011771号