![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
模板
文章平均质量分 79
A_Pathfinder
这个作者很懒,什么都没留下…
展开
-
2_SAT
2_SAT有N个变量,每个变量只有两种可能的取值。再给定M个条件,每个条件都是对1两个变量的取值限制。求是否存在N个变量的合法赋值,使M个条件均被满足。我们可以把此类问题转换成统一的形式:若变量AiA_iAi赋值为AipA_ipAip,则变量AjA_jAj必须赋值为AjqA_jqAjq,其中q,p为{0,1};解:首先,对于这张图中的每个强连通分量中的点一定要么同时选,要么同时不选...原创 2020-01-05 19:05:34 · 273 阅读 · 0 评论 -
欧拉路
欧拉回路,也就是著名的哥尼斯堡七桥问题,也成一笔画问题。问题描述:是否可以找到一种方案,使得人们从自己家里出发,不重复走每一座桥,然后回到家中?在了解欧拉回路前,我们再了解一下知识。有向图、无向图、混合图的欧拉通路、欧拉回路。无向图:存在欧拉回路的条件:原图连通,每个结点均为偶度结点。存在欧拉通路的条件:存在欧拉回路,或原图连通,有两个结点为奇度结点,其他结点均为偶度结点。有向图:...原创 2019-10-13 12:43:12 · 261 阅读 · 0 评论 -
第三讲:多重背包
有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是w[i],价值是c[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本算法: 这题目和完全背包问题很类似。基本的方程只需将完全背包问题的方程略微一改即可,因为对于第i种物品有n[i]+1种策略:取0件,取1件……取n[i]件。令f[i][v]表示前i种...原创 2019-04-15 20:47:15 · 342 阅读 · 0 评论 -
单调队列
先说明单调队列与优先队列的区别:单调队列的长度取决于输入数据的合法性,而优先队列的长度始终与输入数据的数量等同。而他们的单调性都是单调递减或单调递增。//以下文字转于大佬:https://www.luogu.org/problemnew/solution/P1886单调队列有两个性质 队列中的元素其对应在原来的列表中的顺序必须是单调递增的。 队列中元素的大小必须是单调递*(增...原创 2019-04-08 19:27:40 · 555 阅读 · 0 评论 -
第二讲:完全背包
在01背包的基础上,每种物品都无限件可以使用。样例://来源:http://ybt.ssoier.cn:8088/problem_show.php?pid=1268设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于M,而价值的和为最大。【输入】第一行:两个整数...原创 2019-04-02 20:14:39 · 219 阅读 · 0 评论 -
第一讲:01背包
这是最基本的背包问题,每个物品最多只能放一次样例://来源:http://ybt.ssoier.cn:8088/problem_show.php?pid=1267一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,...,Cn,求旅行者能获得最大总价值。【...原创 2019-04-02 19:34:21 · 279 阅读 · 0 评论 -
快速幂取模 模板
因为有模运算公式:(a^b)%m == (a%m ^ b)%m;所以对快速幂取模为:#include<bits/stdc++.h>using namespace std;typedef long long ll;ll qpow(ll a,ll b,ll m){ if(a>m) a%=m; ll ans=1; while(b){ if(b&am...原创 2019-03-22 20:28:30 · 167 阅读 · 0 评论 -
Java 大整数类的应用 模板
这里记录一下Java的大整数一些操作:import java.math.BigDecimal;import java.math.BigInteger;import java.util.Scanner;public class bigint { public static void main(String[] args) { String s1,s2; Scanner sc...原创 2019-03-18 21:18:29 · 230 阅读 · 0 评论 -
蛇形数组
第一种:z形数组图片来源:大佬博客接下来寻找每根线条与串联的元素的个数的关系,以及每个元素所在坐标变化范围之间的关系。根据上图,找规律:第一根线,坐标范围是0-0,只有一个元素,[0][0]第二根线,坐标范围是0-1;有2个元素,[0][1] [1][0]第三根线,坐标范围是0-2;有三个元素,[0][2] [1][1] [2][0]......假设y坐标...原创 2019-03-22 11:22:13 · 400 阅读 · 0 评论 -
dfs序
dfs序就是指一棵树被dfs时所经过的节点的顺序。dfs是深度优先的,所以对于一个点,它会先遍历完它的所有子节点,再去遍历他的兄弟节点以及其他所以对于一棵树的dfs序来说,这个点和他所有的子节点会被存储在连续的区间之中。//图片来源:http://www.cnblogs.com/stxy-ferryman/p/7741970.html我们都知道它的dfs序是:A-B-D-E-G-C...原创 2019-03-18 19:46:53 · 718 阅读 · 0 评论 -
树状数组 模板3 求逆序对(非离散化)
离散化的树状数组:https://blog.csdn.net/A_Pathfinder/article/details/88042960这里就提一下和普通树状数组的区别,这里是用要查询的数当作下标,而普通树状数组是直接顺序下标放值,也就是说区别在于updata函数,普通的是updata(i,k);//这里的i就单纯是区间下标;而求逆序对的时候是updata(a[i],1)。我们每次都是在这个...原创 2019-03-18 16:08:25 · 233 阅读 · 0 评论 -
第四讲:混合背包
问题 如果将01背包、完全背包、多重背包混合起来。也就是说,有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包),求解01背包与完全背包的混合考虑到在01背包和完全背包中最后给出的伪代码只有一处不同,故如果只有两类物品:一类物品只能取一次,另一类物品可以取无限次,那么只需在对每个物品应用转移方程时,根据物品的类别选用顺序或逆序的循环...原创 2019-04-15 21:00:05 · 223 阅读 · 0 评论 -
字典树
字典树,也称前缀树,是一种哈希树的变种。典型应用是统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。主要思想是用时间来换空间。上面这棵Trie树包含的字符串集合是{in, inn, int, tea, ten, to}。每个节点的编号是我们为了描述方便加上去的。树中的每一条边上都标识有一...原创 2019-07-24 16:44:36 · 386 阅读 · 0 评论 -
Prime Test Miller_Rabin+Pollard_rho
传送门这题卡的时间卡的真的厉害。不仅卡了Miller_Rabin算法,Pollard_rho算法,还卡了gcd 和 反复平方运算。题目大意:给你一个数,如果是素数,直接输出prime,否则输出他的第一个素因子。因为给的数特别大特别多,所以我们只能用Miller_Rabin算法进行大数判断,在判断不是素数后,还要用Pollard_rho算法进行分解。两个都是神仙算法。首先看第一个吧,...原创 2019-08-03 22:16:40 · 312 阅读 · 0 评论 -
割点和桥
先介绍一些基础定义:(都是针对无向图)点连通度与边连通度在一个无向连通图中,如果有一个顶点集合V,删除顶点集合V以及与V中顶点相连(至少有一端在V中)的所有边后,原图不连通,就称这个点集V为割点集合。一个图的点连通度:最小割点集合中的顶点数。如果一个边集合,删除这个边集合后,原图不连通,就称这个边集为割边集合。一个图的边连通度:最小割边集合中的边数。点双连通:如果一个无向连通图的点连通...原创 2019-10-08 21:13:16 · 1025 阅读 · 0 评论 -
严格次小生成树 讲解+模板
了解次小生成树(严格次小生成树) 之前,需要先了解前置知识。最小生成树:https://blog.csdn.net/A_Pathfinder/article/details/88125032最近公共祖先 :https://blog.csdn.net/A_Pathfinder/article/details/101034332首先我们看什么是严格,我们求得最小生成树准确来说是不严格最小生成树...原创 2019-09-25 10:56:16 · 719 阅读 · 0 评论 -
floyd求最短环路径 及其路径保存 //1494:【例 1】Sightseeing Trip
传送门再次刷新了我对floyd的认知,因为涉及到了可模板部分,单独放一篇。//floyd求最短环路径 及其路径保存 #include<bits/stdc++.h>using namespace std;const int N = 310; const int INF = 0x3f3f3f3f;typedef long long ll;int n,m,ans = I...原创 2019-09-03 20:06:33 · 498 阅读 · 0 评论 -
Bellman_Ford算法 SPFA算法
用spfa 算法求关于有负权边的最短路。每次从队列中取出一个节点X,遍历与X相通的Y节点,查询比对 Y的长度 和 X的长度+ X与Y的长度 如果X的长度+ X与Y的长度 >Y的长度,说明需要更新操作。 1).存入最短路。 2).由于改变了原有的长度,所以需要往后更新,与这个节...原创 2019-09-02 13:18:14 · 227 阅读 · 0 评论 -
叉积
叉积图中两个向量p1,p2.两个向量a和b的叉积写作a×b(有时也被写成a∧b,避免和字母x混淆)向量p1,p2的叉积为我们把(0,0)点当做p0.有了叉积的基础,我们在判断两条线段的关系p0p1,p1p2,就可以直接添一条有向线段p0p2,再检查p0p1,p1p2和p0p2的时钟旋转关系。为了做到这一点,我们计算出叉积给出向量的一些模板运算stru...原创 2019-08-09 23:19:25 · 406 阅读 · 0 评论 -
判断两直线相交 poj 2653
传送门题目也就是让我找到在最上面的棍子。枚举棍子i上方的每根棍子j(i+1≤j≤n),若其中任何一根棍子与棍子i相交,则说明棍子i被上面的棍子压住了,直接判断棍子i+1;若棍子i未与上方的任何一根棍子相交,则棍子i属于最上面的棍子。#include<cstdio>#include<cmath>#include<algorithm>co...原创 2019-08-09 22:44:26 · 236 阅读 · 0 评论 -
求多边形面积
poj 1654传送门一个字符串,由1-9的数字组成,表示从原点出发,多边形是如何构成的。这里8, 2, 6和4分别表示向北,向南,向东和向西;而9, 7, 3和1分别表示向东北,西北,东南和西南。 数字5仅出现在序列结束的时候,表示停止行走。根据向量叉积原理,只要我们把每次要输的点和上个点做叉积,最后比较奇偶,除2即可,因为叉积得到的是四边形面积。上ac代码#inclu...原创 2019-08-09 22:38:26 · 149 阅读 · 0 评论 -
最大团 hdu1530
最大团也就是最大完全图给定一个无向图 G=(V,E),若对任意两个顶点 u、v ∈U,有 (u,v)∈E,则称 U 是 G 的完全子图,G 的完全子图 U 称为图 G 的团。 极大团:一个团不被其他任一团所包含,即其不是任一团的真子集 最大团:在 V 中取最多的点,满足任意两点间相互连接 最大独立集:在 V 中取最多的点,满足任意两点间不连接(最大独立集数=补图的最大...原创 2019-07-23 10:29:21 · 332 阅读 · 0 评论 -
划分树 求区间第k小问题
划分树是用来求区间第k小问题,区别于主席树,划分树的的内存消耗更小,主席树能够接树状数组或者线段树求动态区间第k小。划分树的原理基于线段树,在给定的大n区间内部求任意区间第k大,我们将n个数不断按照大小顺序并且与原序列对比,再把比较后的值按下表保存在左右子树里,比中间值小的在左子树,比中间值大的在右子树,同时记录每个层每个点i和i点之前进入左子树点的个数(重点,这方便后面的查询)。首先我们...原创 2019-07-26 13:02:26 · 296 阅读 · 0 评论 -
树状数组 模板2 区间修改+单点查值
树状数组的区间修改是基于差分的基础之上:设数组a[]={1,6,8,5,10},那么差分数组b[]={1,5,2,-3,5}也就是说b[i]=a[i]-a[i-1];(a[0]=0;),那么a[i]=b[1]+....+b[i];假如区间[2,4]都加上2的话a数组变为a[]={1,8,10,7,10},b数组变为b={1,7,2,-3,3};发现了没有,b数组只有b[2]和b...原创 2019-03-18 15:57:26 · 198 阅读 · 0 评论 -
求排列组合的两种方式 模板
(图片都来源百度百科)先说p(n,m),表示从n个不同元素中取出m个元素,并按次序排列的排列数,即字典序,组成的排列叫全排列。若从n个不同元素中取出m个元素,不考虑次序,则称从n中取出m个组合,其组合数表示为C(n,m)=n!/m!*(n-m)!;关于排列组合的性质用途太多了,下次再统一整理,这里只介绍求C(n,m)的两种方式第一种:连乘m个整数商:对于m个连续...原创 2019-03-21 20:01:10 · 550 阅读 · 0 评论 -
求最大回文子串 Manacher算法
马拉车算法可以在O(n)的线性时间求出字符串中的最大回文子串。以下转载于:https://www.cnblogs.com/grandyang/p/4475985.html由于回文串的长度可奇可偶,比如"bob"是奇数形式的回文,"noon"就是偶数形式的回文,马拉车算法的第一步是预处理,做法是在每一个字符的左右都加上一个特殊字符,比如加上'#',那么bob --> #...转载 2019-03-12 16:23:40 · 183 阅读 · 0 评论 -
位运算 审美课
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T519先看一些基本的位运算:学位运算为以后状压,压位做下铺垫吧。题目描述:样例输入3 2 //3个同学 2幅画,判断完全相反的对数1 00 11 0样例输出2样例说明 同学1和同学2的答案完全相反; 同学2和同学3的答案完全相反; 所以答案...原创 2019-03-01 20:52:21 · 387 阅读 · 0 评论 -
并查集 poj 1182 食物链
题目链接:http://poj.org/problem?id=1182首先,并查集是一种来管理元素分组情况的数据结构。时间复杂度为O(a(n))//阿克曼函数的反函数,比O(log(n))还要快。这题先用基础的方法来看,先介绍并查集的基本形式(模板类型):初始化:void Init(int n){ for(int i = 1;i <= n*3; ++i){ par[...原创 2018-09-17 21:58:58 · 508 阅读 · 0 评论 -
尺取法
先给一篇小伙伴尺取链接:https://blog.csdn.net/weixin_41162823/article/details/80328404其次,尺取法又叫滑动窗口,大部分尺取法(上链接题不用)都建立在有序的情况下,一段区间是否能达标。下面给出样例(来源2018蓝桥杯省赛):日志统计小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:t...原创 2019-02-25 20:11:00 · 164 阅读 · 0 评论 -
利用扩展欧几里得求一元同余方程和求逆元
先明白扩展欧几里得求不定方程:https://blog.csdn.net/A_Pathfinder/article/details/88131225再放个逆元整理的:https://blog.csdn.net/weixin_41162823/article/details/82824988?tdsourcetag=s_pctim_aiomsg同余的定义:给出一个正整数m和两个整数a,b,如...原创 2019-03-05 16:55:51 · 398 阅读 · 0 评论 -
素数的一般判断方式 3+1种
素数:又叫质数,只能被1和本身整除的数。在介绍c++方式前:先看一下素数的一些性质(来源百度百科),有些题目可能会用到数目计算尽管整个素数是无穷的,仍然有人会问“100,000以下有多少个素数?”,“一个随机的100位数多大可能是素数?”。素数定理可以回答此问题。1、在一个大于1的数a和它的2倍之间(即区间(a, 2a]中)必存在至少一个素数。2、存在任意长度的素数等差数列。3、...原创 2019-03-01 12:36:09 · 664 阅读 · 0 评论 -
利用快速排序找到无序数组中第k(大,小)的位置
快速排序每次都会确定哨兵的一个正确(排好序后)的位置,即左边都是比他小,右边都是比他大(找小,顺序,反之亦然);下面程序时间复杂度是O(n);详细注解#include <bits/stdc++.h>using namespace std;int quick_select(int a[], int l, int r, int k) { int p = rand()...原创 2019-02-25 15:31:21 · 461 阅读 · 0 评论 -
bfs+路径保存 模板
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T291题意:走迷宫,左上角起点,右下角终点,只能走0,UDLR对应上下左右,找出最短路径及到最短路操作按字典序大小输出。保存路径的时候用用一个多的结构体数组来存放下一个点的父亲节点和从当前点到下一个点需要的操作,然后再从终点不断的找父亲节点,直到找到起点,放入栈中,最后顺序出栈就是路径。值得一提的...原创 2019-03-01 07:54:39 · 833 阅读 · 0 评论 -
各个进制的转换方式
任意进制之间的相互转化:第一种,常规的先通过运算转换成10进制,再转换成指定进制#include<bits/stdc++.h>using namespace std;typedef long long ll;void conver(string sum,string &s2,ll jz,ll k){ ll num=0,t; for(int i=0;i<...原创 2019-02-24 14:47:05 · 454 阅读 · 0 评论 -
树状数组 模板1 单点修改和区间和
划重点:(先放一篇大佬的博客,我就直接划重点了:https://blog.csdn.net/ljd4305/article/details/10101535)0:树状数组时间修改值和区间和复杂度log(n);用于维护区间和计算区间和。1:a[]表示原数组,c[]表示树状数组,更新值和更新sum都根据二进制下标,数组下标最后从1开始 C[i] = A[i - 2^k + 1] ...原创 2019-02-27 21:35:12 · 231 阅读 · 0 评论 -
拓扑排序 用dfs或者bfs
拓扑排序是找DAG(有向无环图)的关键路径拓扑排序从数据结构原理上说是不断找对应入度为0的点,找到就删去这个点和从此点出的边。这对应的其实是用bfs的方法,所以用bfs得到的其实除了判断还有每次找的出度为0的点(顺序不唯一),而dfs得到的是这个环的路径。(反正我一般都是并查集判断的。。)先说bfs:int in[N];queue<int> qq;void print...原创 2019-03-02 19:07:22 · 609 阅读 · 0 评论 -
费马小定理和欧拉定理
先拓展一下威尔逊定理:如果p是素数,则(p-1)! ≡ -1(mod p)。例:p=11,10!=1*(2*6)*(3*4)*(5*9)*(7*8)*10 ≡ 1*10 ≡ -1(mod 11);费马小定理:(定义)如果p是素数,a是正整数,且gcd(a,p)=1(互质),则a^(p-1) ≡ 1(mod p); 定理1:由此可以得出a^...原创 2019-03-06 08:57:21 · 902 阅读 · 0 评论 -
kmp 模板
#include<bits/stdc++.h>using namespace std;const int maxn = 1000010;char a[maxn],b[maxn];int kmp[maxn];int la,lb;void init(){ cin>>a+1; cin>>b+1; la=strlen(a+1); lb=strlen...原创 2019-03-20 18:22:34 · 390 阅读 · 0 评论 -
三分查找(转)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&转载 2019-03-11 16:47:04 · 240 阅读 · 0 评论 -
最短路 dijkstra , floyd 和spfa算法 模板
最短路算法还有spfa算法,但是对于比赛的一些数据来说,单纯的求最短路还是用D算法更快更稳定,但是对于有负权值的边来说,就必须用到spfa算法了,所以放在下次说。floyd 5 行算法,求各个点之间的最短路,相当于遍历每个边,做传递,a-c,c-b,那么a就可以通过c到b。时间复杂度O(n^3)ps:一般就这种用邻接矩阵存好点模板代码:void read(){ memset(g...原创 2019-03-14 17:00:43 · 328 阅读 · 0 评论