*----------模板模板----------*
文章平均质量分 93
yashem66
长期提供绕地人造卫星清洗除尘服务。
展开
-
(模板)中国剩余定理 重学笔记 POJ1006
资料推荐有很大帮助的博客 ——(本文多处引用其中金句,特此注明出处并鞠躬感谢博主。)主要定理定理一: 几个数相加,如果任何一个数不能被div整除,那么这几个数的和一定不能被div整除。定理二: 两数不能整除,若除数扩大(或缩小)了几倍,而被除数不变,则其商和余数也同时扩大(或缩小)相同的倍数(余数必小于除数)。主要步骤求出各个除数(div)的最小公倍数(lcm)。求出各个除数的基础数(b原创 2017-04-24 15:13:30 · 861 阅读 · 1 评论 -
(复习)图论--最小生成树--Kruskal算法
思路:读边后将边按照边权从小到大排序,每次选择一条可选的最小边,其中对于可选的定义为:边的两点不在同一个集合内,既选中这条边不会使图出现环。这个过程要用并查集实现,由于递归层数可能会很大(我就因为写了递归RE无数次)所以说这里面的find函数我写成了非递归。实现:邻接表+并查集。**时间复杂度:**O(ElogE) E为图中的边集原创 2016-08-06 09:25:08 · 466 阅读 · 0 评论 -
(复习)图论--最短路--SPFA算法
SPFA算法是求单源最短路径的一种算法,它还有一个重要的功能是判负环(在差分约束系统中会得以体现),在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。 ——(引自百度词条)原创 2016-08-06 09:38:15 · 454 阅读 · 0 评论 -
(复习)图论--最短路--Floyd算法
作为最短路算法里面最好写的算法真的是当之无愧,代码只有五行,理解起来也十分的简单,时间复杂度O(N^3),适用于数据较小、需要信息较多、稠密图等情况。原创 2016-08-06 09:47:35 · 440 阅读 · 0 评论 -
(复习)图论--最短路--Dijkstra算法
定义:迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。思路:选一起点(单源问题中的源点),从起点开始拓展,用边更新每一个点到起点的最小距离,每次选一个到起点距离最短的点进行下一步拓展。代码:/*2016.8.7 Bu原创 2016-08-07 10:48:12 · 479 阅读 · 0 评论 -
(复习)数据结构--堆--附模板
很久都没有写堆了,结果昨天突然一考有点懵呢,下午的时候写写线段树和树状数组这些东西……现在先粘一波堆排和上下调堆的模版。原创 2016-08-09 08:29:27 · 251 阅读 · 0 评论 -
(新知)数据结构--Treap--模版
Treap是一棵二叉搜索树,只是每个节点多了一个优先级fix,对于每个节点,该节点的优先级小于等于其所有孩子的优先级。当然,引入优先级fix的目的就是防止BST退化成一条链,从而影响查找效率。 所以,这样看来就是:Treap中对于节点的关键字key来说,它是一棵二叉搜索树,而对于fix来说,它是一个最小堆,所以Treap可以看成是Tree+Heap。原创 2016-12-06 20:39:35 · 327 阅读 · 0 评论 -
(新知)数据结构--Splay--模板
写了一发splay的模板,在正常的应用中应该是够用了。除了具备splay特有的功能比如区间的分裂与合并,还具有所有treap的功能,同时也可以维护区间的最大值最小值。对于初次学习splay比较有帮助。原创 2016-12-09 15:58:41 · 526 阅读 · 0 评论 -
动态树 LCT(Link-Cut-Tree)--入门教程
什么是LCT(Link-Cut-Tree)根据杨哲先生的论文(QTREE),可以得知,动态树问题是一类问题的统称,而解决这种问题最常用到的数据结构就是LCT(Link-Cut-Tree)。LCT的大体思想类似于树链剖分中的轻重链剖分,轻重链剖分是处理出重链来,由于重链的定义和树链剖分是处理静态树所限,重链不会变化,变化的只是重链上的边或点的权值。由于这个性质,我们用线段树来维护树链剖分中的重链,但是原创 2016-12-12 14:06:21 · 4043 阅读 · 0 评论 -
(新知)字符串--后缀数组--一个有个性的好模板
和其他的版本换汤不换药,以二元组的形式进行比较。时间复杂度为O(nlog2n)。#include<bits/stdc++.h>using namespace std;#define len (int)str.size()const int maxn=int(1e6)+10;string str;int M=1;int s[maxn]; //序列数组int rnk[maxn],tmp[ma原创 2016-12-17 19:57:40 · 271 阅读 · 0 评论 -
(HDU1348)计算几何--Scan法求凸包
题目:HDU1348题目链接:HDU1348-传送门首次更改自己的代码风格,感觉很厉害。 Description: 没什么用 Input: The first line of the input file contains two integer numbers N and L separated by a space. N (3 <= N <= 1000) is the原创 2016-12-18 09:54:30 · 377 阅读 · 0 评论 -
网络流 最大流问题入门选作 (POJ1273,BZOJ1711)
算法对于网络流的最大流问题,笔者比较偏向于使用Dinic算法(其实是因为笔者实在是弱只会一种最大流算法),所以接下来的两题使用的都是Dinic算法。为了方便入门(或是自己以后回忆),在此介绍一下Dinic算法的流程: 1. 进行一次bfs,并确定是否还有能够从源点S到汇点T的流,如果有的话,进入步骤2,否则跳至步骤4; 2. 进行一次增广操作,并将流过的边的可用流量减去流过的流量,同时建一条流量原创 2017-01-05 14:52:10 · 337 阅读 · 0 评论 -
Suffix_Array模板重置版
#include <cstdio>#include <iostream>#include <string>#include <algorithm>using namespace std;const int maxn=int(1e6)+10;int n,k;int rnk[maxn],tmp[maxn];int sa[maxn];int lcp[maxn];bool cmp(int a,原创 2017-02-04 14:43:35 · 373 阅读 · 0 评论 -
半平面交自用模板
#include <cstdio>#include <iostream>#include <vector>#include <complex>#include <cmath>using namespace std;typedef complex<double> Point;typedef vector<Point> Polygon;typedef pair<Point,Point> L原创 2017-03-21 19:26:31 · 398 阅读 · 0 评论 -
BZOJ3323 文艺平衡树 (splay 绿色无毒模板)
题目大意您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 。题解splay裸题,维护子树翻转信息即可。代码:#include <cstdio>#include <iostream>using namespace std;struct Node { int原创 2017-04-10 18:12:19 · 491 阅读 · 2 评论 -
BZOJ1013 球形空间产生器sphere (高斯消元)
题目大意有一个球形空间产生器能够在n维空间中产生一个坚硬的球体。现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器。题解以二维为例,设圆心坐标为 x0x0 和 y0y0,若有两点的坐标(x1x1 , y1y1)、(x2x2 , y2y2),则有以下关系:(x1−x0)2+(y1−y0)2=(x2−x0)2+(原创 2017-04-10 10:08:30 · 361 阅读 · 0 评论 -
(复习)图论--最小生成树--Prim算法
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(英语:Robert C. Prim)独立发现;19原创 2016-08-06 09:15:40 · 507 阅读 · 0 评论