ICode9

精准搜索请尝试: 精确搜索
  • BZOJ 3531 [Sdoi2014]旅行 树链剖分+动态开点线段树2019-05-23 22:41:54

    题意 S国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。 为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行。旅行时他们总会走最短路,并且为了避

  • BZOJ 2243 [SDOI2011]染色 树链剖分+线段树2019-05-23 16:51:52

    题意 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。 分析 用线段树维护下区间左

  • 树链剖分(待续)2019-05-16 12:48:39

    时间复杂度: 预处理O(n + NlogN) , 修改和查询O(logN) 树链剖分原理: 第一遍 dfs , 求得 所有节点的 深度 dep[ ] , 记录每个节点的父亲节点 fa[ ] , 记录每个节点所代表的子树的大小【包括节点本身】 第二遍 dfs , 记录 每个节点的 重链 , 记下当前节点 x  所在的链 的 链头top[x] ,

  • 有点难度的树链刨分2019-05-05 19:44:47

       这道题 想到解法很简单关键是写的时候比较ex 至少我写了1个多小时才写完还有颇多的细节处理。 树刨之后线段树维护颜色这个很好维护因为我们都写过线段树维护的区间最大连续子段和。 然后 维护一下区间修改一下 然后 查询一下即可。 关键是查询好吧。 对于查询我们显然 是边求

  • 树链刨分2019-05-05 09:03:25

      跟谁不会树链刨分一样 我也会。 树链刨分其实就是对树的每一条链都进行规划然后分轻重链。一般都是线段树维护的较多。 第一步 先求出这颗树的重儿子son[x] f[x] x节点的父亲 d[x] 节点的深度 size[x] 以x为根节点的儿子数 inline void dfs(int x,int father){ d[x]=d[fath

  • 树链剖分——线段树区间合并bzoj染色2019-04-23 21:49:46

    线段树区间合并就挺麻烦了,再套个树链就更加鬼畜,不过除了代码量大就没什么其他的了。。 一些细节:线段树每个结点用结构体保存,pushup等合并函数改成返回一个结构体,这样好写一些 struct Seg{ int lc,rc,tot; Seg(){lc=rc=-1;tot=0;}};Seg seg[maxn<<2];int lazy[maxn<<2];Seg p

  • 洛谷.3676.小清新数据结构题(树链剖分 树状数组)2019-04-13 17:37:59

    洛谷 又来写水题啦。(最近做的明明都没多少难度,洛谷评级真是迷) 假设固定以\(1\)为根,没有换根。令\(s_i\)表示\(i\)子树的点权和。 修改点\(u\),显然只会影响\(path(1,u)\)上的点的\(s_i\)。别去考虑单个点贡献的变化,直接考虑整条路径对答案的贡献变化。 把赋值变成增加\(v\),那么整条

  • SPOJ 16580 QTREE7 - Query on a tree VII 树链剖分+树的分治2019-04-11 21:50:12

    titleSPOJ16580LUOGUSP16580JYOJ2053Youaregivenatree(anacyclicundirectedconnectedgraph)withnnodes.Thetreenodesarenumberedfrom1ton.Eachnodehasacolor,whiteorblack,and... 本文为VIP专属文章,单击开通VIP

  • BZOJ - 2243 染色 (树链剖分+线段树+区间合并)2019-03-25 21:48:16

    题目链接 线段树维护区间连续段个数即可。设lc为区间左端点颜色,rc为区间右端点颜色,则合并两区间的时候,如果左区间右端点和右区间左端点颜色相同,则连续段个数-1。 在树链上的区间合并可以定义一个结构体作为线段,分成左右两条链暴力合并。也可以考虑到树上的路径中每两个树链“断开”

  • 【模板】树链剖分2019-03-19 21:42:38

    洛咕 已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1:格式:1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2:格式:2 x y 表示求树从x到y结点最短路径上所有节点的值之和 操作3:格式:3 x z 表示将以x为根节点的子树内所有节点值都加上z

  • 树链剖分2019-03-19 20:44:04

    模板题   支持的操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式: 2 x y 表示求树从x到y结点最短路径上所有节点的值之和 操作3: 格式: 3 x z 表示将以x为根节点的子树内所有节点值都加上z 操作4: 格式: 4 x 表示求以x为根节点的子树内所有节点值

  • 树链剖分学习笔记2019-03-09 21:49:28

    一直想更博客了,一直没更,今天闲的没事,就把之前学习的树链剖分整理了一下。         预备知识:线段树,DFS序 DFS序   DFS序,字面意思,就是DFS到的顺序 我们只需要在搜到节点的时候记录一下就可以了 比如这样可能是一个树的DFS序 那知道了DFS序又有什么用呢 我们可以发现一颗子树在D

  • [HNOI2016]网络 树链剖分,堆2019-02-28 21:47:25

    [HNOI2016]网络 LG传送门 表示乱搞比正解难想。 整体二分很好想吧。 但是为了好写快乐,我们选择三个\(\log\)的乱搞。 先树剖,线段树套堆维护区间最大值。对于一次修改,如果是插入,就把树上除了这条链的地方加上这个重要度,如果是删除则反之。注意线段树可以标记永久化,这里用的堆是一种(

  • jzoj4918. 【GDOI2017模拟12.9】最近公共祖先 (树链剖分+线段树)2019-02-24 21:00:21

    题面 题解 首先,点变黑的过程是不可逆的,黑化了就再也洗不白了 其次,对于\(v\)的祖先\(rt\),\(rt\)能用来更新答案当且仅当\(sz_{rt}>sz_{x}\),其中\(sz\)表示子树中黑点的个数,\(x\)表示\(rt\)走到\(v\)的路径上的第二个节点 每一次染黑一个新的点\(u\)之后,我们要让它所有祖先的\(sz+

  • 树链剖分2019-02-24 13:42:57

    树链剖分是基于重孩子将树划分成若干条链,配上对应的数据结构(例如这里的线段树)就可以维护树中的链,甚至可以直接维护子树。 貌似还有更高级的$\text{LCT}$,要搭配$\text{Splay}$。正在学习中。 具体证明。。待更。。 源码如下。 1 #include <bits/stdc++.h> 2 3 using namespace

  • BZOJ2157 边转点 树链剖分2019-02-09 10:47:49

    https://www.lydsy.com/JudgeOnline/problem.php?id=2157 现在就是后悔,非常后悔 本来想随便拿个树剖热身,不料开了个毒瘤题。 题意:动态维护一棵树上的链最大值,最小值,和,修改的操作是一条链全部取反以及一条边单点修改   边转点是肯定要边转点的,把所有的边化成两端深度更深的那个点

  • Bzoj2164 采矿(线段树+树链剖分)2019-02-03 16:39:25

    题面 Bzoj 题解 对于每个节点,我们可以用树链剖分和线段树维护以下信息: 单独在某个点分配\(i\)个人的最大收益(可以\(O(m)\)计算) 分配\(i\)的最大收益(可以\(O(m^2)\)计算) #include <cstdio> #include <cstring> #include <algorithm> using std::min; using std::max; using std::s

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有