【题解】HNOI2016树】的更多相关文章

[LG3248][HNOI2016]树 题面 洛谷 题解 因为每次你加入的点是原树上某一棵子树 那么我们一次加入一个点,代表一棵子树加到大树下面 那么我们要找到一个点在一个大点中用主席树在\(dfs\)序中\(kth\)即可 询问的话,先将所有的点权(深度)转化为边权 查询时先将两点跳到它所在大点的根 再倍增跳到大点1(原树)的下面,再在原树上倍增跳一跳即可. 虽然说起来容易,但是其实还是很码的qaq. 代码 #include <iostream> #include <cstdio>…
4539: [Hnoi2016]树 题意:不想写.复制模板树的子树,查询两点间距离. *** 终于有一道会做的题了...... 画一画发现可以把每次复制的子树看成一个大点来建一棵树,两点的lca一定在大点的lca里 然后每个大点维护一坨信息:节点编号的区间范围,到根的距离,大点对应子树的根,大点是接在了模板树里哪个点下面 然后做就行了 给出大树上一个点的编号,找到对应的大点可以二分:再找到对应模板树上的点,因为编号是按原大小来的,就是子树k大值,可以用主席树 求距离的时候我分了三种情况: 同一个…
4539: [Hnoi2016]树 链接 分析: 主席树+倍增. 代码: #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<cmath> #include<cctype> #include<set> #include<queue> #include<vector> #include&l…
4539: [Hnoi2016]树 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 746  Solved: 292[Submit][Status][Discuss] Description 小A想做一棵很大的树,但是他手上的材料有限,只好用点小技巧了.开始,小A只有一棵结点数为N的树,结点的编号为1,2,…,N,其中结点1为根:我们称这颗树为模板树.小A决定通过这棵模板树来构建一颗大树.构建过程如下:(1)将模板树复制为初始的大树.(2)以下(2…
POJ2182题解——线段树 2019-12-20 by juruoOIer 1.线段树简介(来源:百度百科) 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN).而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需要离散化让空间压缩.   2.线段树实际应用 上面的都是些基本的线段树结构,但只有这些并不能做什么,就好比一个程…
[HNOI2016]树(可持久化线段树+树上倍增) 题面 给出一棵n个点的模板树和大树,根为1,初始的时候大树和模板树相同.接下来操作m次,每次从模板树里取出一棵子树,把它作为新树里节点y的儿子.操作完之后有q个询问,询问新树上两点之间的距离 \(n,m,q \leq 1 \times 10^5\) 分析 显然直接把所有节点存下来是不行的,因为节点的个数最多可以到\(10^{10}\).发现本质不同的子树只有n个,我们考虑把子树缩成一个点,构造一棵新树. 新树上的点有3种编号,注意区分: ​ 1…
题解-[HNOI2016]序列 [HNOI2016]序列 给定 \(n\) 和 \(m\) 以及序列 \(a\{n\}\).有 \(m\) 次询问,每次给定区间 \([l,r]\in[1,n]\),求 \[\sum_{l\le l'\le r'\le r}\min_{i=l'}^{r'}a_i \] 数据范围:\(1\le n,m\le 10^5\),\(|a_i|\le 10^9\). 蒟蒻要练习省选题,结果就遇到这道数据结构(好久没写数据结构题都忘光了).结果正好遇到一道毒瘤题,于是蒟蒻来写…
大概最近写的这些题目都是仿生的代码……在这里先说明一下.可能比起做题记录来说更加像是学习笔记吧.之所以这样做主要还是因为感受到最近做的很多题目自己会做的都比较简单,不会做的又不敢触及,虽然也有所进步.学习了一些新的算法,但大体而言还是在原地踏步的样子.于是想要多观摩一下他人做题的过程并加以记录,也能开拓自己的视野,重新整理出新的思路,学习新的代码技巧. 这一道题目首先第一眼我们就可以放弃建出这棵树的想法:极端情况下树的节点可以达到n2的级别,1e10个节点光是建出来就已经不可接受,更别谈找lca…
外话:最近洛谷加了好多好题啊...原题入口 这题好像是SPOJ的题,挺不错的.看没有题解还是来一篇... 题意: 很明显吧.. 题解: 我的做法十分的暴力:树链剖分(伪)+线段树+\(set\)... 首先,我们可以考虑每次修改一个点的颜色的影响. 易知,翻转一个点颜色,只会对于他的子树产生影响,对于别的点就毫无意义了. 然后,只要学过一点树链剖分的就知道,我们可以将整棵树按它的\(dfs\)序进行标号, 每个点的序号就是\(dfn\), 然后记下它的子树大小\(size\),然后对于每个点\(…
外话:最近洛谷加了好多好题啊...原题入口 这题好像是SPOJ的题,挺不错的.看没有题解还是来一篇... 题意 很易懂吧.. 题解 我的做法十分的暴力:树链剖分(伪)+线段树+ std :: set ... 首先,我们可以考虑每次修改一个点的颜色的影响. 易知,翻转一个点颜色,只会对于他的子树产生影响,对于别的点就毫无意义了. 然后,只要学过一点树链剖分的就知道,我们可以将整棵树按它的\(dfs\)序进行标号, 每个点的序号就是\(dfn\), 然后记下它的子树大小\(size\),然后对于每个…