算法小结
EMber _
人但有追求,世界亦会让路。
展开
-
如何求树的重心
树的重心:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡. 打这个blog主要是为了等一下写的点分治做铺垫。 例题T1:poj1655 题意:求一棵树上的重心编号和去掉这个重心以后最大子树的节点数。 在dfs上做文章,每次对于一个点,记录下他子树中的最大节点,然后更新一下编号和子树节点大小就可以了。#include <iostr原创 2016-08-19 21:09:11 · 1001 阅读 · 0 评论 -
莫队算法学习小记 bzoj3781
所谓莫队,就是。。。好吧我说不出来具体释义。。 这个算法常用于序列的处理中,对于序列处理有很大的作用。 能够使用莫队算法的题目都具有一个特点: 对于每一个询问的区间【l,r】都能O(1)推导到l-1,r.l,r+1.l+1,r.l,r-1. 使用莫队时要先对所有的询问分块,每一个块的长度为sqrt(n),然后按块的顺序排序,询问的r作为第二关键字(具体看题目,一般来说是以r为第二关键字)。原创 2016-09-12 21:16:26 · 296 阅读 · 0 评论 -
JZOJ4721 NlogN的LCS
题意:让你求两个字符串的LCS,n,m<=300000,a[i]<=10^9. 本来我是直接按照普通的nlogn lcs直接打,没想到RE 0了,看了一下数据才知道爆掉了。。a[i]<=10^9,打了个离散化才过。。而且普通的nlognlis会WA,不明觉厉。。 讲解nlognlcs: 。。因为是lcs所以最终的答案串中的每一位一定会在A和B串中出现,所以可以把A中的串投影到B串中,对原创 2016-09-19 20:34:25 · 267 阅读 · 0 评论 -
沉迷TARJAN无法自拔系列
最近一口气看见了6道TARJAN,没有一道在比赛的时候打对,感觉自己菜哭了。 tarjan这么基础的算法都没能完全掌握,,然后恶补了几天,感觉以后遇见tarjan题应该不会打不出来了(flag高高立起) 这篇博文会全面介绍tarjan的所有用途(选手自己挖掘的不算,我又不知道。): 1.求有向图的强连通分量 2.求无向图的割顶和桥 3.求无向图的双连通分量 4.判断是否为二分图(其实是d原创 2016-09-19 21:28:40 · 320 阅读 · 0 评论 -
倍增LCA复习
时间过去了如此之久,我连倍增LCA都不怎么记得了,要粗事啊。 首先预处理层数和每个节点的父亲,然后预处理p数组,p[i,j]表示i向上第2^j个祖先。最后对于每个询问x,y先把x,y变成同一层数的(x或y向上走直到两个层数相等),然后x,y同时向上走,直到x和y的父亲相同位置。 代码(转自http://www.tuicool.com/articles/N7jQV32)//1. DFS预处理出所有原创 2016-09-20 16:29:11 · 321 阅读 · 0 评论