算法分析
文章平均质量分 67
ciociooo
这个作者很懒,什么都没留下…
展开
-
最近公共祖先
Description给出一棵有N(编号1到N)个节点的有根树,求出指定节点对的最近公共祖先! 对于树中节点x而言,从根节点到达x的这一条路径中经过的所有节点,都称为x的祖先。 如上图所表示的树中, 根节点为8。8、4、10、16都是12的祖先。对于6和12这对节点而言,从6出发往上朝根走和从12出发往上朝根走的两条路径最早交汇的地点是4号节点,因此4号点是6和12的最近公共祖先原创 2013-10-24 17:26:34 · 985 阅读 · 0 评论 -
【PYC#1 欢乐赛】 题解
【题目地址】点击打开链接【分析们】【T-1】树状数组+Trie树【T-2】首先显然这是个堆,这个堆以位置为关键字,且形状固定。我们要做的就是将数字1~N填入堆中,并且令这些数字也满足堆性质。考虑我们有一个以x为根的堆,有i个数字可以填。我们用M[i]表示以i为根的堆的结点个数,可以逆序O(N)求得。用f[i]表示有i个数的方案数。我们得到一个原创 2014-02-23 15:57:00 · 1450 阅读 · 3 评论 -
输入输出优化
本人亲自测试,一般使用这两个优化时间能降到原来的一半。(只针对输入输出数据超过5w组的题目,数据量越大,优化越明显)【原理】 众所周知,scanf和printf比cin和cout要快,但是更快的是getchar和putchar。【代码】1.输入优化void _in(int &x){ char t=getchar(); while(t<'0'||'9'<t原创 2013-10-03 13:55:21 · 1631 阅读 · 5 评论 -
TopCoder SRM 607 题解
。。。第一次进div1,就一道都没有搞出来,第一题理解错了题意,第二题乱搞没有成功,第三题没看 。果然深夜+感冒不是适合刷题的模式啊,不过幸好还保持在blue。最后看了看WJMZBMR神犇的代码,表示自己果然傻逼,连第一题这样的傻逼题都没A。250pt:分奇数和偶数长度分别讨论,然后直接枚举中心和长度计算即可。。。(一开始理解错题意,以为不是按顺序拼凑,对出题人只能呵呵,明原创 2014-02-03 22:30:29 · 1378 阅读 · 1 评论 -
HEOI-2012 DAY1 题解 (BZOJ 2742-2744)
Pro 1:【题目大意】给出一个一元n 次方程: a0 + a1x + a2x2 +…+ anxn= 0 求此方程的所有有理数解。 Input第一行一个整数 n。第二行n+1 个整数,分别代表a0 到anOutput第一行输出一个整数 t,表示有理数解的个数。 接下来t 行,每行表示一个解。 解以分数的形式输出,要求分子和分母互质,且分母必须是正整数。 特原创 2014-01-19 14:28:59 · 2277 阅读 · 0 评论 -
Splay的几种操作(代码)
1.右旋(zig)void _zig(int x){ int y,z; y=pr[x]; z=pr[y]; if(z==0) root=x; else if(ls[z]==y) ls[z]=x; else rs[z]=x; pr[x]=z; pr[y]=x; ls[y]=rs[x]; pr[rs[x]]=y; rs[x]=y; si原创 2013-09-28 16:00:32 · 850 阅读 · 0 评论 -
背包问题求第K优解
【基本思想】 将每个状态都表示成有序队列,将状态转移方程中的max/min转化成有序队列的合并。这里以01背包为例讲解一下。【分析】 首先看01背包求最优解的状态转移方程:F[i][v]=max(F[i-1][v],F[i-1][v-C[i]]+W[i])。如果要求第K优解,一个首先想到的肯定是修改状态数组,改为F[i][v][k]。其中F[i][v][k]表示转载 2013-09-28 09:28:51 · 1628 阅读 · 0 评论 -
最小环(有向无向均可)
朴素的算法: 令e(u,v)表示u和v之间的连边,再令min(u,v)表示,删除u和v之间的连边之后,u和v之间的最短路。那么最小环则是min(u,v) + e(u,v),时间复杂度是O(V^2E)。改进的方法: 在floyd的同时,顺便算出最小环 ans=INF; for(int k=1;k<=N;k++) { for(int i=1转载 2013-09-28 11:16:13 · 1186 阅读 · 0 评论 -
RMQ Sparse Table实现简析及代码
【分析】预处理: 采用DP的思想,f[i][ j]表示[i , i+2^j - 1]区间中的最小值(也就是从第i个数起连续2^j个数中的最小值)。 如数列3,2,4,5,6,8,1,2,9,7。f[1][0]=3,f[1][1]=2,f[1][2]=2,f[1][3]=1,f[2][0]=2,f[2][1]=2,f[2][2]=2…… f[i][原创 2013-10-03 13:17:26 · 937 阅读 · 0 评论 -
单调队列简述
单调队列,顾名思义,里面的各个元素是(严格)单调递增(减)的,且各个元素的下标也是单调递增(减)的。这个队列要满足队尾和队首都能够删除元素,但只有队尾能添加元素。而在删除元素的时候,就能够求得很多信息。使用单调队列往往可以优化时间复杂度至O(n)。 单调队列在oi中有很多应用和模型。 下面是几个例子:原创 2013-10-01 17:06:34 · 700 阅读 · 0 评论 -
NOIP 2013 提高组题解 【附AC代码】
NOIP2013 提高组题解原创 2013-11-19 15:28:44 · 4291 阅读 · 0 评论 -
SBT!!
具体的讲解请参见陈启峰大牛的论文,此处仅给出C++实现的代码,仅供参考。准备工作:struct SBTnode{ int lc,rc,sz,key;}T[MAXN<<1];int root,SBTtot;旋转:void _Right_Rotate(int &x){ int k=T[x].lc; T[x].lc=T[k].rc; T[k].rc=x; T[k].sz=原创 2013-11-23 10:33:45 · 996 阅读 · 0 评论 -
【KpmCup#0 省选模拟赛】题解
【题目地址】【T-1】很明显的差分约束系统,判负环。但是裸的要超时,我们注意到一个负环必定在一个强连通分量中。于是我们先求出SCC,再判负环。只需要判断入队次数大于sqrt(N)即可,虽然这样是有反例的,但大多数数据是能过的。【T-2】斜率优化dp我们可以得到一个dp方程: f[i]=min{f[j]+sigma(b[k]*(i原创 2014-02-20 16:45:11 · 1513 阅读 · 0 评论