
数据结构
zhangliwei_cs
Lowkey!
展开
-
HDU3966(树链剖分)
题目:Aragorn’s Story题意:给一棵树,并给定各个点权的值,然后有3种操作: I C1 C2 K: 把C1与C2的路径上的所有点权值加上K D C1 C2 K:把C1与C2的路径上的所有点权值减去K Q C:查询节点编号为C的权值分析:典型的树链剖分题目,先进行剖分,然后用线段树去维护即可。 转载:HDU3966(树链剖分) 个人觉得原博主PushUp函数处的sum[]更改有些转载 2016-03-04 23:23:23 · 358 阅读 · 0 评论 -
树链剖分(详解)
原文地址:树链剖分 作者:starszys “在一棵树上进行路径的修改、求极值、求和”乍一看只要线段树就能轻松解决,实际上,仅凭线段树是不能搞定它的。我们需要用到一种貌似高级的复杂算法——树链剖分。 树链,就是树上的路径。 剖分,就是把路径分类为重链和轻链。 记siz[v]表示以v为根的子树的节点数,dep[v]表示v的深度(根深度为1),top[v]表示v所在的链的转载 2016-03-04 23:37:22 · 315 阅读 · 0 评论 -
Poj2746-Housewife Wind 树链剖分入门(边权)
模板题,注意起点和终点可能相同 权值在边上; Message A: 0 u 询问从当前点到u点总花费。 Message B: 1 i w 将第i条边的花费修改为w。#include <cstdio> #include <algorithm> #include <cstring>using namespace std; const int N = 1e5 + 5; struct Edge原创 2016-03-05 17:03:26 · 444 阅读 · 0 评论 -
Poj2831 树链剖分||次小生成树
因为开的树链剖分专题,一看题目,第一思路就是: 让找出一个最小生成树,然后将这棵生成树进行链剖,再维护两点间边的最大值,只有查询询问,很好写,然后由于太急躁,以致Find()函数明显的错误居然没有发现,(在dep比较时,我居然交换了dep,而不是交换两个点),然后找了好久,开始怀疑自己的想法,找了好久没找到反例,最后百度了一下,发现可链剖可次小生成树,然后发现思路是对了,于是我试了一发次小生成树(原创 2016-03-09 23:41:20 · 603 阅读 · 0 评论 -
Kmp算法
主要思想:当当前某个字符匹配失败时,不是向纯暴力一样,将文本串匹配的起点往右移一格,而是将在模板中当前的匹配点左移到文本串当前点所能匹配到的最大的匹配点处。通过预处理出当文本串在模板某个位置匹配失败时,应跳转到的位置,即nex数组,将时间复杂度降低为O(m+n);Kmp入门题目:Poj 3461\2752\2406\1961nex[i]数组代表在模板i处匹配失败,模板中的匹配点应该移动到的位置。Km原创 2016-03-12 15:27:45 · 265 阅读 · 0 评论