算法与数据结构
文章平均质量分 68
SkyGr
I‘m an oier.
展开
-
Spfa算法模版
{}const maxn=5000;type link=^node; node=record x,dis:longint; next:link; end;var g:array[1..maxn] of link; dist,q:array[1..maxn] of longint; v:array[1..maxn] of boolean; n:longi原创 2012-02-21 21:33:52 · 282 阅读 · 0 评论 -
Rq-350【归并树】
题目:找第k小的数问题编号:350 题目描述给出一个长度为N的序列A1,A2,A3,...,AN,其中每项都是小于10^5的自然数。现在有M个询问,每个询问都是Ai...Aj中第k小的数等于多少。数据范围:在60%的数据中,1≤N≤1000,1≤M≤1000在100%的数据中,1≤N≤10000,1≤M≤2000Darkmaster说:“这题水吧?水原创 2012-04-25 20:56:54 · 687 阅读 · 0 评论 -
NOI01-方程的解数[双向深度搜索,哈希表,平衡树]
已知一个n元高次方程:其中:x1, x2, …,xn是未知数,k1,k2,…,kn是系数,p1,p2,…pn是指数。且方程中的所有数均为整数。假设未知数1≤ xi ≤M, i=1,,,n,求这个方程的整数解的个数。输入格式文件的第1行包含一个整数n。第2行包含一个整数M。第3行到第n+2行,每行包含两个整数,分别表示ki和pi。两个整数之间用一个空格隔开。第3行的数据对应i=1原创 2012-04-26 19:13:52 · 929 阅读 · 0 评论 -
Gabow算法【转自nocow】
Gabow算法[编辑]求解有向图强连通分量的Gabow算法Gabow算法与Tarjan算法的核心思想实质上是相通的,就是利用强连通分量必定是DFS的一棵子树 这个重要性质,通过找出这个子树的根来求解强分量.具体到实现是利用一个栈S来保存DFS遇到的 所有树边的另一端顶点,在找出强分量子树的根之后,弹出S中的顶点一一进行编号. 二者不同的是,Tarjan算法通过一个low转载 2012-04-30 19:43:34 · 858 阅读 · 0 评论 -
AC自动机算法详解
首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配算法的基础知识。AC自动机算法分为3步:构造一棵Trie树,构造失败指针和模式匹配过程。转载 2012-05-01 07:57:58 · 426 阅读 · 0 评论 -
后缀自动机
如果我们想要建立一个自动机,使它能够接收一个串s的所有后缀,那么最暴力的想法应该就是,直接用这个串的所有后缀来建立一个AC自动机上面就是用aabbabd这个字母串作为母串建立的AC自动机(没有画fail边,好吧,那它就是个字母树...),嗯,建出这个东西的确就可以接收此串的所有后缀了,但是但是,聪明的朋友就会发现,这玩意儿的节点个数是O(n^2)级别的….我只给了你一个串,你就用了转载 2012-05-01 07:59:33 · 1681 阅读 · 2 评论 -
Manacher 算法(极大回文串的O(n)求法)
Manacher 算法是一个高效的算法,像KMP一样。算法简介:算法的目的是在O(n)的时间复杂度内找到一个字符串中各个字母所在的最大长度的回文串。此算法用到了一个Rad[]数组的定义,Rad[i]表示回文的半径,即最大的j满足str[i-j+1...i] = str[i+1...i+j]。我们的工作就是把全部的Rad[]求出来。有两个结论:(1): 对于一个整数k,如果原创 2012-04-28 21:16:27 · 401 阅读 · 0 评论 -
poj3487[延迟认可算法]
The Stable Marriage ProblemTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 1785 Accepted: 758DescriptionThe stable marriage problem consists of matchi原创 2012-05-02 15:19:47 · 868 阅读 · 0 评论 -
poj2186[tarjan缩点算法]
Popular CowsTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 16073 Accepted: 6402DescriptionEvery cow's dream is to become the most popular cow in the原创 2012-05-02 19:35:23 · 404 阅读 · 0 评论 -
Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)
基本概念:1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。3.点连通度:最小割点集合中的顶点数。4.割边(桥):删掉它之后,图必然会分裂为两个或两个以上的子图。5.割边集合:如果有一个边集合,删除这转载 2012-05-03 14:08:53 · 2480 阅读 · 0 评论 -
poj3352[无向图双连通分量]
Road ConstructionTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 5657 Accepted: 2800DescriptionIt's almost summer time, and that means that it's alm原创 2012-05-03 15:00:08 · 443 阅读 · 0 评论 -
poj2942[补图+点双连通分量+交叉染色法判定二分图(奇圈判定)]
Knights of the Round TableTime Limit: 7000MS Memory Limit: 65536KTotal Submissions: 5892 Accepted: 1832DescriptionBeing a knight is a very attractive career: se原创 2012-05-03 21:52:49 · 657 阅读 · 0 评论 -
Sap算法模版
{}const maxn=300;var{data of sap} n:longint; map:array[1..maxn,1..maxn] of longint; vh,dis,di,pre,his:array[0..maxn] of longint;{function of sap}function flow(s,t:longint):longint;var原创 2012-02-19 20:11:48 · 212 阅读 · 0 评论 -
Rqnoj341星门跳跃
题目描述在EVE游戏中,宇宙被划分成为许多区域,每个区域中都有数目不定的星门,可以通过星门来跳跃到特定的区域(星门是双向的)。现在你正参与BBE联军与MLGBD联盟的会战,但由于飞船受损,需要尽快回到后方的友军空间站进行维护。试编写程序,计算出所须的最短的返回空间站时间。为了简化问题,我们约定飞船所在的位置为区域1,空间站所在的位置为区域N。问题规模:对于80%原创 2012-04-19 22:08:44 · 1339 阅读 · 0 评论 -
左偏树
[可并堆与左偏树]我们最常用的二叉堆,是最常用的优先队列,它可以在O(logN)内实现插入和删除最小值操作。但是对于合并两个有序的优先队列,二叉堆就显得力不从心了。左偏树是一种可并堆(Mergeable Heap),意思是可以在O(logN)时间内完成两个堆的合并操作。左偏树(Leftist Tree),或者叫左倾树,左式树,左式堆(Leftist Heap),左堆。顾名思义,它好象是向左转载 2012-05-12 19:56:39 · 624 阅读 · 0 评论 -
sap!!!
constoo=maxlongint;typelink=^node;node=record x,c:longint; bak,nxt:link;end;varG,di:array[1..55005] of link;vh,dis,his:array[0..55005] of longint;pre:arra原创 2012-05-31 18:27:37 · 432 阅读 · 0 评论 -
rq-481
这题没啥意思,就是用来复习下费用流,数据还有错的,cheat~type link=^node; node=record x,flow,dis:longint; next,back:link; end;var g:array[1..100] of link; dist,pre,q:array[0..100] of longint; line:array[1..1原创 2012-04-23 20:18:54 · 276 阅读 · 0 评论 -
Tarjan算法
话说省选时就研究过这个,现在终于可以应用了。。==================================================================转载自 kerrynit最终编辑 kerrynit[有向图强连通分量]在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected转载 2012-04-10 23:49:12 · 237 阅读 · 0 评论 -
选择排序模版
for i:=1 to n-1 dofor j:=i+1 to n doif big(a[j],a[i]) then swap(a[i],a[j]);原创 2012-02-16 23:04:47 · 256 阅读 · 0 评论 -
quicksort模版
var a:array[1..maxn] of enknow_type;function big(a,b:enknow_type):boolean;procedure swap(var a,b:enknow_type);procedure qsort(l,r:longint);var i,j:longint; mid:enknow_type;begin i:=原创 2012-02-16 22:54:58 · 223 阅读 · 0 评论 -
并查集模版
var father:array[1..maxn] of longint;procedure init;var i:longint;begin for i:=1 to maxn do father[i]:=-1;end;function f(x:longint):longint;begin if father[x]=-1 then exit(x)原创 2012-02-16 23:02:05 · 199 阅读 · 0 评论 -
Bellman-ford模板
const maxe=5000; maxn=5000;var g:array[1..maxe] of record x,y,dis:longint; end; dist:array[1..maxn] of longint; n,e:longint;function bellman_ford(s:longint):boolean;var原创 2012-02-26 13:18:44 · 239 阅读 · 0 评论 -
Trie模板
type Tlink=^Trie; Trie=record p:array['a'..'z'] of Tlink; id:longint; end;var root:Tlink; count:longint;function NewTrie:Tlink;v原创 2012-02-26 08:31:58 · 234 阅读 · 0 评论 -
树状数组
//一维const maxn=1000000;var c:array[1..maxn] of longint; n:longint;function lowbit(x:longint):longint;begin lowbit:=x and (-x);end;procedure add(i,v:longint);begin w原创 2012-02-25 14:32:32 · 228 阅读 · 0 评论 -
kruskal算法模版
program kruskal;const maxm=1000;type line=record x,y,len:longint; end;var g:array[1..maxm] of line; father:array[1..maxm] of longint; n,m:longint;function f(x:longint):longint;begin原创 2012-02-17 21:26:41 · 272 阅读 · 0 评论 -
线段树模板
const maxn=1000000*4;var T:array[1..maxn] of record l,r,q:longint; end;function max(a,b:longint):longint; begin if a>b then exit(a) else exit(b); end;procedure build(l,r,p:longint);v原创 2012-02-25 16:04:36 · 209 阅读 · 0 评论 -
Dijistra算法模版
{}const maxn=10000;type link=^node; node=record x,dis:longint; next:link; end;var{data of dijistra} g:array[1..maxn] of link; dist:array[1..maxn] of longint; v:array[1..maxn]原创 2012-02-19 20:54:14 · 641 阅读 · 0 评论 -
Floyed算法模版
{}const maxn=300;var{data of Floyed} n:longint; g:array[1..maxn,1..maxn] of longint;function min(a,b:longint):longint; begin if a<b then exit(a) else exit(b); end;{procedure of Floyed}pr原创 2012-02-19 20:21:16 · 304 阅读 · 0 评论 -
Prim算法模版
{}const maxn=10000;type link=^node; node=record x,dis:longint; next:link; end;var{data of prim} g:array[1..maxn] of link; dist:array[1..maxn] of longint; v:array[1..maxn] of原创 2012-02-19 20:39:19 · 245 阅读 · 0 评论 -
Treap
一直想学习平衡树,这几天终于学会了平衡树的一种简单的实现方法,Treap!先从宏观上讨论下什么是Treap.Treap是一棵概率型的自平衡二叉搜索树,节点包含两个域fix和value,对于任意节点,对于value来说,树是二叉搜索树,对于fix来讲,树是二叉堆。要注意的是,value是插入到平衡树容器中的元素(显然value的定义域是个偏序集),而fix则是在元素插入时随机生成的数据。Tr原创 2012-03-03 22:07:08 · 308 阅读 · 0 评论 -
Kmp算法模版
program kmp;type nexttype=array[1..255] of longint;procedure get_next(t:string;var next:nexttype);var j,k:longint;begin j:=1; k:=0; next[1]:=0; while j<=length(t) do原创 2012-02-23 17:05:05 · 236 阅读 · 0 评论 -
随机自平衡二叉搜索树Treap模版
program Program_Treap;{2012.03.04.Treap by Sky_Grfunction size(t:treap):longint;//获取子树大小function fix(t:treap):longint;//获取子树随机因子procedure right_rotate(var t:treap);//右旋procedure left_rotate(var原创 2012-03-04 22:50:37 · 515 阅读 · 0 评论 -
堆模板
今天做题遇到了堆,又优化了自己的模版。。。这是几个月以前的版本,非递归的,效率很高。const maxn=30000;var a:array[1..maxn] of longint; len:longint;function big(a,b:longint):boolean;begin if a>b then exit(true) else exit(fal原创 2012-02-25 12:24:57 · 179 阅读 · 0 评论 -
APIO2012-Dispatching[左偏树]
如果会左偏树的话,这题就是个模版题。可惜比赛时侯不会左偏树,做排序链表的了90.program dispatching;typelink=^node;node=record key,height,size:int64; sum:int64; ch:array[0..1] of link;end;原创 2012-05-20 21:14:44 · 649 阅读 · 0 评论