
数据结构-树链剖分
Endless_Way
这个作者很懒,什么都没留下…
展开
-
BZOJ 1036 [ZJOI2008]树的统计Count
首先树链剖分。要支持求极值,求和,修改,把所有树链加入线段树进行维护即可。#include<cstdio>#include<algorithm>#define MAXN 30010using namespace std;struct edge{int next,to;}e[MAXN*2];struct segment{int sum, maxx, l, r;}node[MAXN*10];原创 2016-08-01 22:08:08 · 324 阅读 · 0 评论 -
BZOJ 4034 [HAOI2015]T2
树剖+线段树要能够一次性给子树赋值,可以用DFS序+线段树 要查询点到根的路径和,树剖+线段树 于是用树剖的DFS序建树#include<cstdio>#define N 100005#define ll long longusing namespace std;struct edge{int next,to;}e[N<<1];struct segment_tree{int l, r;原创 2016-09-25 13:47:58 · 301 阅读 · 0 评论 -
SPOJ GSS 1~8
GSS是一系列查询区间最大子段和及其变种的题目。GSS 1 ~ 8 的题号分别是:1043 & 1557 & 1716 & 2713 & 2916 & 4487 & 6779 & 19543 目前完成进度:1 (好惨啊,慢慢做吧……)SPOJ 1043 GSS 1应该是不难的。我们假设一个区间的最大子段已经找到,往区间里随便放一条分界线。有两种情况:一是最大子段在分界线的某一边,二是最大子段经过分界原创 2016-10-22 00:01:04 · 1372 阅读 · 1 评论 -
BZOJ 3626 [LNOI2014]LCA
树链剖分+线段树+离线挂题解:http://blog.youkuaiyun.com/popoqqq/article/details/38823457主要思想:对于询问[l,r]和z,可以把[l,r]的每一个点到根的路径上的边的权值分别+1,计算z到根的路径权值和就是所求询问。于是离线排序做即可。好巧妙- -#include<cstdio>#include<algorithm>#define N 50005原创 2016-10-02 18:33:20 · 373 阅读 · 0 评论 -
UOJ 150 [NOIP2015]运输计划
二分+树链剖分+差分要求最远的值最小,于是我们可以考虑二分答案。对于每一个二分出来的lim,我们只需要判断所有路径(指运输计划里面所有的路径)中长度大于lim的所有路径是否存在一条公共边,使得最长路径减去它可以小于等于lim(如果最长的可以,那么短的也肯定可以)那么怎么求这条边?我刚开始的想法是树剖+线段树,对每一条超过lim的路径上的边的都记+1,然后暴力枚举边来找公共边。但是这样是O(nlog3原创 2016-10-06 14:47:27 · 718 阅读 · 0 评论 -
51Nod 1600 Simple KMP
SAM+LCT/树剖线段树一个点的深度就是有多少个以这个点结尾的后缀等于前缀。fail树性质不太够,不好下手,直接考虑答案的贡献。对于两个相等的区间[l,r]&[x,y]其中l#include<cstdio>#include<cstring>#include<iostream>#define N 100005#define MOD 1000000007#define A 28#defin原创 2017-04-27 23:31:05 · 564 阅读 · 0 评论