树
文章平均质量分 50
Sunshine_cfbsl
Nothing.
展开
-
HNOI2010 bounce 弹飞绵羊 (BZOJ2002)
LinkLink-CutCut TreesTrees 裸题。。。(Link-Cut Trees 戳这里) 若可以从i弹到j则连一条从j到i的边,若弹飞了,则连一条从0到i的边。。。 然后就是这样。。。 代码如下:/*ID: Sunshine_cfbslLANG: C++*/#include<cstdio>#include<cstring>#include<algorithm>#i原创 2016-08-16 11:01:20 · 624 阅读 · 2 评论 -
POJ2352 Stars(树状数组 or SplayTree)
发现网上并没有这一题的Splay做法。。。SplayTree模板点这里 其实是水题,所以不做讲解。 这里只是来贡献代码。。。树状数组:/*ID: Sunshine_cfbslLANG: C++*/#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>using namespace std;int原创 2016-08-13 09:51:14 · 397 阅读 · 1 评论 -
POJ3580 SuperMemo (Splay Tree的各种操作)
这题基本上就是SplaySplay TreeTree维护区间的终极题了。 AC后就能领悟到SplaySplay TreeTree的真谛(O_O) Splay Tree模板戳这里 题目大意: 对于一个数列{A1,A2,...,An}\{A_1,A_2,...,A_n\},写一个程序能够实现以下操作:ADD x y D:给数列{Ax,...,Ay}\{A_x,...,A_y\}中的每一个数都增原创 2016-08-17 21:05:12 · 620 阅读 · 0 评论 -
主席树
据说这个数据结构是主席(OrzOrz)在不会写划分树的情况下自己写的一个替代品。。。 然后应该叫做函数式线段树。。。 却被叫成了这么一个高大上的名字。。。主席树是一种能够查询区间的第k大数(和划分树一样)的离线数据结构。思路是对于每一个区间[1,p][1,p]构造一颗线段树。先对所有数字离散化,然后如果有n个数,则线段树维护[1,n]范围内出现的数的个数。对于区间[a,b][a, b]线段树[1原创 2016-08-11 19:23:31 · 514 阅读 · 0 评论 -
树套树之线段树套线段树(POJ2155 Matrix)
表示知道线段树的人做一道二维线段树就应当会了。。。 所以这里直接给出例题。Matrix(POJ 2155) 题目传送门 题目描述: 给出一个N*N的矩阵A, 它的元素都是0或1,A[i,j]表示第i行第j列的数字。开始时,A[i,j]均为0(1<=i,j<=N)。我们可以对它进行以下两种操作: 1.C x1 y1 x2 y2(1<=x1<=x2<=N,1<=y1<=y2<=N)改变以(x1,原创 2016-08-11 17:01:03 · 2096 阅读 · 0 评论 -
树套树之线段树套平衡树(ZOJ2112 Dynamic Rankings)
接上篇:树套树之线段树套线段树 树套树都应该是做一道题就会了的。。 Dynamic Rankings(ZOJ 2112) 题目描述: 某公司开发了一种新型的计算机,它不再仅能找到给定N个数中第k小的数。它变成了一个更强大的系统。对于N个数a[1],a[2],…,a[N],你可以询问a[i],a[i+1],…,a[j-1],a[j]中第k小的数(i≤j,0<k≤j+i−1i\le j,0\lt原创 2016-08-11 17:10:26 · 1099 阅读 · 0 评论 -
静态 Splay Tree 模板
复习一下Splay,没想到一个简单的模板写了一个多小时。。。注:该模板比较短,所以可能会有些难以理解。该结构体包含插入与查询操作。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 100010;struct Splay_Tree { int fa[MAXN]原创 2016-08-09 20:27:07 · 988 阅读 · 0 评论 -
树链剖分
我们有时候需要一种方法快速地求出树上任意两点之间路径的权值和(或者路径上边权的最大最小值)。这时,我们就可以用到树链剖分。所谓树链剖分,就是将一棵树分为许多条链,然后将这些链连起来,用线段树来维护区间的和(或者最大最小值)。 下面定义几个术语及数组:size[i]:以i为根结点的子树的节点个数 son[i]:i的子节点中size最大的子节点编号(若不存在则为-1) 重儿子:son[i]即为i的原创 2016-08-08 16:58:31 · 741 阅读 · 0 评论 -
SPOJ00375 Query on a tree 树链剖分
题目大意: 给你一棵n个节点的树,实现以下两种查询: 1.CHANGE i ti : 将第i条边的权值更改为ti 2.QUERY a b : 询问节点a到节点b路径上最大的边权树链剖分的水题,树链剖分详见:传送门 这里注意由于存在更改操作,需要增加一个数组map[i]表示第i条边在线段树中的位置。 代码如下:/*ID: Sunshine_cfbslPROG: SPOJ00375LAN原创 2016-08-08 17:07:31 · 518 阅读 · 0 评论 -
动态树之Link-Cut Trees
关于动态树动态树(DynamicDynamic TreesTrees)问题, 即要求我们维护一个由若干棵子结点无序的有根树组成的森林。 要求这个数据结构支持对树的分割,合并,对某个点到它的根的路径的某些操作, 以及对某个点的子树进行的某些操作。(来源——QTREE解法的一些研究byYangZhe)解决动态树问题有很多种方法 ,这里介绍LinkLink-CutCut TreesTrees,它不能够实现原创 2016-08-13 15:03:33 · 877 阅读 · 0 评论 -
各种LCA的模板
好久没有写博客了,联赛前一天来写一点关于LCA的各种模板 极力推荐第四种方法1.Sparce_Table 算法把树按照DFS序重新编号并求出DFS序列后,利用序列中两点编号之间的最小值即为LCA的性质,通过RMQ求解。 代码如下:/*ID: Sunshine_cfbslLANG: C++PROG: LCA*/#include<cstdio>#include<cmath>#incl原创 2016-11-18 15:07:01 · 2228 阅读 · 7 评论