模板
冬日阳光下的一只猫
这个作者很懒,什么都没留下…
展开
-
最近公共祖先(LCA):tarjan与倍增
首先说一下离线算法:tarjan 该算法基于dfs和并查集。对于求LCA(u,v)LCA(u,v),当返回到节点xx时,必然已经访问完了xx的子树。此时将子树上的节点的祖先标记为xx。这样递归处理下去,当uu和vv第一次被标记时,xx就是它俩的最近公共祖先。实现: 从根节点向下搜索时,搜索完一个节点时,将它放入并查集中,与其父亲节点连边。再判断该节点对应的要询问的节点是否已经被访问过。若已访问过原创 2015-08-20 16:42:59 · 1213 阅读 · 0 评论 -
压8位高精度模板
#define LL long long intstruct bignum{ LL num[MAXN] ; void init() { memset(num,0,sizeof num); } bool operator < (const bignum &a)const { if(num[0]!=a.num[0])ret原创 2015-08-20 15:54:21 · 745 阅读 · 0 评论 -
【扩展欧几里得+解不等式】sgu106The equation
题目链接 题目大意:对于一个不定方程ax+by+c=0ax+by+c=0,其中x∈[x1,x2]x∈[x1,x2]和y∈[y1,y2]y∈[y1,y2]。求有多少组解。 数据范围:每一个数的绝对值不超过10810^8。一道裸的扩展欧几里得。 首先将方程变式为ax+by=−cax+by=−c,即c=−cc=−c。 假设a,b,ca,b,c都是正数。 若求得一组解x,yx,y,那么x=原创 2015-09-10 16:50:32 · 1388 阅读 · 0 评论 -
【manacher算法】HDU3294 URAL1297
manacher算法用于计算最长回文子串。 上模板 //s是原子符串,而w是在s的前面、后面、字符之间插入一个未出现的字符‘#’ scanf("%s",s); w[0]='*';//防止越界,在最前面加上一个‘*’ w[++len]='#'; for(int tmp=strlen(s), i=0;i<tmp;++i) { w[++len原创 2015-12-19 12:08:16 · 378 阅读 · 0 评论 -
【AC自动机】hdu2222 hdu2896 hdu3065 zoj3430 poj2778 hdu2243
AC自动机用于多个模式串与多个母串的匹配。 第一步:根据模式串建立字典树int len=strlen(w), r=root; for(int i=0;i<len;++i) { if(tree[r].ch[w[i]])r=tree[r].ch[w[i]]; else r=tree[r].ch[w[i]]=++cnt; } ++tree[r].c原创 2015-12-24 20:31:17 · 549 阅读 · 0 评论