
经典算法程序
文章平均质量分 60
zz_ylolita
这个作者很懒,什么都没留下…
展开
-
bzoj1036-树链剖分模板
剖分后的树有如下性质: 性质1:如果(v,u)为轻边,则siz[u] * 2 性质2:从根到某一点的路径上轻链、重链的个数都不大于logn。总之两个dfsdfs1(int x,int f) //f是x的父亲枚举和x相邻的点的时候注意不等于f 才可以递归 要维护的东西: dep[x] x节点深度 siz[x] 以x节点为根原创 2016-03-18 23:39:11 · 1384 阅读 · 0 评论 -
noi2012美食节
描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节。作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴。他很快就尝遍了美食节所有的美食。然而,尝鲜的欲望是难以满足的。尽管所有的菜品都很可口,厨师做菜的速度也很快,小M仍然觉得自己桌上没有已经摆在别人餐桌上的美食是一件无法忍受的事情。于是小M开始研究起了做菜顺序的问题,即安排一个做菜的顺序使得同学们的等待时间最短。小M发现,美食节共有n原创 2015-03-17 00:10:51 · 628 阅读 · 0 评论 -
二分图最佳匹配(网络流)
var t,ii,i,j,n,cost,top,tail,min,tt,ttf:longint; pre,d:array[1..1000]of longint; b:array[1..10000]of longint; flag:array[1..1000]of boolean; f,c:array[1..200,1..200]of longint;begin原创 2015-03-16 23:54:04 · 1592 阅读 · 0 评论 -
vijos1112小胖的奇偶(并查集,区间转两端线段)
program xiaopang;const maxn=65533;//maxn最好大一点,65533可以var father,hash:array[1..maxn shl 2]of longint; ch:char; l,i,x,y,n,ans:longint;label 1;function h(x:longint):longint; //hash,需要学习!注意数组也要原创 2015-03-04 23:07:06 · 942 阅读 · 0 评论 -
线段树
hdu3308//线段树,求区间最长上升连续序列长度,有更新program tt;type point=record l,r,lmax,rmax,max:longint; end;var tree:array[1..400000]of point; n,m,t1,a2,b,l,i:longint; a:array[0..100000]of longint;原创 2015-03-25 16:51:27 · 445 阅读 · 0 评论 -
三分法求极值
http://hi.baidu.com/czyuan_acm/item/81b21d1910ea729c99ce33db转载 2015-03-25 17:00:00 · 457 阅读 · 0 评论 -
二维树状数组
//二维树状数组//即行lowbit,列lowbitvar c:array[0..1030,0..1030]of longint; n,m,x,y,k,x1,y1,x2,y2:longint;function lowbit(x:longint):longint;begin lowbit:=x and(-x);end;procedure modify(x,y,delta:long原创 2015-03-25 16:37:49 · 372 阅读 · 0 评论 -
vijosp1697平面几何——带权并查集
一、一些概念 xor:亦或,相同为0,不同为1 or:或,有一个为1则为1 本题中用0代表平行,1代表垂直 way[i]表示i与i的father[i]是垂直还是平行(值为0或1) 题目中读入的平行垂直关系和way[]表示的都是两个直线之间的平行垂直关系,因此都用xor运算 二、并查集的程序段 1、找父亲 function getfather(x:longint):longint;原创 2015-03-01 17:22:07 · 576 阅读 · 0 评论 -
高精度除法
program 高精度除法;var a,b,c:array[0..40000]of longint;i,j,k,l,m,n,lena,lenb,lenc:longint;s:ansistring;function mo(w:longint):boolean;var i:longint;beginif lena-w+1>lenb then exit(true);if lena-w+原创 2015-02-22 13:22:08 · 620 阅读 · 0 评论 -
hdu1392——凸包模板
http://acm.hdu.edu.cn/showproblem.php?pid=1392type point=record x,y:longint; end;var s,p:array[1..200]of point; n,l,i,min,i1,x1,tot:longint; x,y:array[1..200]of longint; p0:原创 2015-03-16 22:30:16 · 433 阅读 · 0 评论 -
poj2135Farm Tour——最小费用最大流
题目要求从1到n走一遍再从n到1走一遍而且有重边,相当于从1到n走两边所以加一个源点01,费用为0,流量为2加一个汇点n+1n,费用为0,流量为2中间的边流量为1(只走一遍),费用为c然后一遍0->n+1的费用流要注意是无向图,所以一个输入有4条边a->b ,c,1b->a ,-c,0b->a ,c,1a->b ,c,0type point=reco原创 2015-03-16 23:43:44 · 557 阅读 · 0 评论 -
最小费用最大流(邻接矩阵和邻接表)
邻接矩阵:var t,ii,i,j,n,cost,top,tail,min,tt,ttf:longint; pre,d:array[1..1000]of longint; b:array[1..10000]of longint; flag:array[1..1000]of boolean; f,c:array[1..200,1..200]of longint;原创 2015-03-16 23:35:51 · 843 阅读 · 0 评论 -
Manacher算法
http://blog.youkuaiyun.com/ggggiqnypgjg/article/details/6645824/原文说的很清楚,Manacher算法就是O(n)来求一个字符串S的最长回文串的。hdu3068 #include #include #include #include #include //max min函数包含在这个里面。。?using namespace原创 2016-01-01 23:57:18 · 454 阅读 · 0 评论 -
noip2013truck树上路径倍增
#include #include #include #include #include using namespace std;#define INF 0x7fffffffint n,m,x,y,z,l,s,u,v,q;bool vis[10010];struct point{ int x,y,z;}a[50010];struct node{ int y,z,next;原创 2015-11-07 22:45:43 · 811 阅读 · 0 评论 -
bzoj1834 最大流+最小费用最大流
就当模板啦… 不过这题第二问的构图还是可以想一下的。。。 在残量网络中把原来的边全部加一遍,但是有费用w,容量无限大,一开始的边还是费用为0 新建一个源点s,s向1连一条边,容量为k,费用为0,保证这条边满流,就有最小费用了。program bzoj1834;type point=record s,t,cap,flow,o,w,next:longint;end;var p原创 2015-04-15 23:57:15 · 1077 阅读 · 0 评论 -
[AHOI2014]支线剧情(有上下界的费用流)
由于不想被认为三心二意不努力,所以最好这周把ahoi2014做完。。。 【故事背景】 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等。不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情。这些游戏往往 都有很多的支线剧情,现在JYY想花费最少的时间看完所有的支线剧情。 【问题描述】 JYY现在所玩的RPG游戏中,一共有N个剧情点,由1到N编号,第i个剧情点可以根据J原创 2015-04-06 23:51:27 · 3688 阅读 · 0 评论 -
线段树的标记lazy_tag
1.当同时需要维护乘法和加法时,乘法优先级高于加法,并且每次传乘法标记时,要把加法标记同时乘上乘法标记。 2.在查找(find)的时候标记下传原创 2015-04-05 15:24:35 · 1245 阅读 · 0 评论 -
splay__poj3580
这真是很让人难过的一道题。。。。。但是我要硬着头皮写完splay TwT题目要求实现一种数据结构,支持6种操作: add x,y D:第x个数到第y个数之间的数每个加D; reverse x y:第x个数到第y个数之间全部数翻转; revolve x y T:第x个数到第y个数之间的数,向后循环流动T次,即后面T个数变成这段子序列的最前面T个,前面的被挤到后面。 Insert x P:在第x原创 2015-04-04 20:49:08 · 805 阅读 · 0 评论 -
Splay终极模板
写了各种Splay,以下这个版本最让我满意:)。。所以叫“终极”。。。风格飘逸,时间短,代码短也没有恶意缩行。融合各神犇之精华。46 437391(5) SpaceQ 1328 KB 136 MS C++ 1557 B 2013-06-19 23:05:14 非常满意。不加读入优化BZOJ46名。一会儿我试试读入优化的效果。加读入优化以后22 437435(6) SpaceQ转载 2015-04-04 20:51:41 · 1764 阅读 · 0 评论 -
vijosP1524网络流最小割
由于yxy小朋友做了一些不该做的事,他被jzp关进了一个迷宫里。由于jzp最近比较忙,疏忽大意了一些,yxy可以在迷宫中任意走动。整个迷宫可以被看作是一个无向图。迷宫中有一些结点有传送点,可以让他逃离这个迷宫。jzp发明了一种机器人,可以监视迷宫中的道路,被监视的道路yxy不能通过,我们简单的认为监视一条道路的代价即为这条道路的长度。现在jzp正在忙,请你编一个程序算出使yxy无法逃离迷宫的最小监原创 2015-01-03 17:31:41 · 726 阅读 · 0 评论 -
线段树
使用线段树的做法:给线段树每个节点增加一个域cover。cover=1表示该结点所对应的区间被完全覆盖,cover=0表示该结点所对应的区间未被完全覆盖。如下图的线段树,添加线段[1,2][3,5][4,6]原创 2014-12-12 17:05:43 · 396 阅读 · 0 评论 -
poj1061
program p1061;var x,y,n,m,l,a,b,d,xx,yy:int64;function exgcd(a,b:int64;var x,y:int64):int64;var t:int64;begin if b=0 then begin x:=1;y:=0; exgcd:=a; end else begin exgcd:=exgcd(b,原创 2014-12-27 12:30:21 · 478 阅读 · 0 评论 -
【bzoj2257】墨墨的等式
//在n个数中找k个使得它们的最大公约数最大:枚举所有原创 2014-08-16 19:04:08 · 1170 阅读 · 0 评论 -
【bzoj2242】计算器——数论综合
终于在bzoj上AC一题了,虽然是看题解写的。。。原创 2014-08-16 18:09:49 · 1062 阅读 · 0 评论 -
用树状数组求区间最值
注意bit数组存放的是一个区间的最值。更新最值的时候要传递更新。查找的时候也要注意。如果已经不是在一个区间段上了,应该和num[]比。原创 2014-08-08 23:52:31 · 2073 阅读 · 0 评论 -
LCA的tarjan算法理解
转自:http://scturtle.is-programmer.com/posts/30055.htmltarjan算法的步骤是(当dfs到节点u时):1 在并查集中建立仅有u的集合,设置该集合的祖先为u1 对u的每个孩子v: 1.1 tarjan之 1.2 合并v到父节点u的集合,确保集合的祖先是u2 设置u为已遍历3 处理关于u的查询,若查询(u,v)转载 2014-08-07 23:14:58 · 471 阅读 · 0 评论 -
tyvj1038忠诚题解
本题属于ST我用的原创 2014-08-08 20:55:09 · 1031 阅读 · 0 评论 -
二分图匹配之匈牙利算法和 二分图匹配的几种题型
首先介绍匈牙利算法。原创 2014-08-07 21:08:35 · 507 阅读 · 0 评论 -
单调队列
单调队列典型程序:滑动窗口现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。例如:The array is [1 3 -1 -3 5 3 6 7], and k = 3. 窗口 最小值 最大值[1 3 -1] -3 5 3 6 7原创 2014-08-03 21:13:02 · 453 阅读 · 0 评论 -
dijkstra pascal
program dijkstra;var n,m,s,t,i,j,x,y,w,l,min,p,tt:longint; head,d:array[1..1000]of longint; open:array[1..1000]of boolean; edge:array[1..100000,1..3]of longint;begin read(n,m); read(s,原创 2014-08-07 00:33:07 · 1224 阅读 · 0 评论 -
poj1236强连通分量+缩点
一开始脑子秀逗地算出最多边数为2原创 2014-08-31 01:59:05 · 585 阅读 · 0 评论 -
lca倍增算法
HDU2586要注意只有简单边相连的图是一棵树,树有n-1条边原创 2014-08-17 23:22:40 · 3203 阅读 · 0 评论 -
最短编辑距离 poj3356
有三种情况可以导致我们上面设计的状态会发生转移。我们现在来看A[i] 和 B[j] ,①、我们可以在 B[j]后面插入一个核苷酸(即一个字符)ch,ch==A[i],这样做的话,至少需要 dp[i - 1][j] + 1步操作,即 dp[i][j] = dp[i - 1][j] + 1。②、我们可以删除 B[j],这样的话,B[1...j] 变为A[1...i] 需要 dp[i][j原创 2014-10-06 18:21:25 · 441 阅读 · 0 评论 -
求最小环(floyd,dijkstra)
给出一个无向图,求图中的最小环。利用floyd f[k,i,j]的性质来求。program tt;const max=1000000;var n,m,i,j,k,x,y,z,ans:longint; f,g:array[1..100,1..100]of longint;function min(a,b:longint):longint;begin if a<b then原创 2014-12-21 23:06:11 · 1995 阅读 · 0 评论 -
扩展欧几里德
program exgcd;var a,b,x,y:int64;function safe(x:int64):int64;begin safe:=((x+b) mod b+b) mod b;end;procedure ext_gcd(a,b:int64;var x,y:int64);begin if b=0 then begin x:=1;y:=0;原创 2014-10-16 18:58:02 · 461 阅读 · 0 评论 -
noip2013火柴排队
最小交换次数即求逆序对。但应当是原创 2014-10-16 21:11:55 · 1714 阅读 · 0 评论 -
tarjan求lca
program lcastat;var ans,ans1:int64; w:array[1..10000000]of longint; father,head:array[1..10000000]of longint; i,n,p,l:longint; vis:array[1..10000000]of boolean; edge:array[1..1000原创 2014-10-04 21:56:05 · 602 阅读 · 0 评论 -
Lucas 定理
转载请注明出处,谢谢 http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents by---cxloveLucas 定理:A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[转载 2014-10-03 21:24:03 · 399 阅读 · 0 评论 -
vijos P1790拓扑编号
描述H国有n个城市,城市与城市之间有m条单向道路,满足任何城市不能通过某条路径回到自己。现在国王想给城市重新编号,令第i个城市的新的编号为a[i],满足所有城市的新的编号都互不相同,并且编号为[1,n]之间的整数。国王认为一个编号方案是优美的当且仅当对于任意的两个城市i,j,如果i能够到达j,那么a[i]应当优美的编号方案有很多种,国王希望使1号城市的编号尽可能小,在此前提原创 2014-10-26 22:46:49 · 1140 阅读 · 0 评论 -
kruskal求生成树的扩展
给你一个图,求把这个图分成原创 2014-10-26 20:51:53 · 536 阅读 · 0 评论