BZOJ4539: [Hnoi2016]树】的更多相关文章

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…
题目链接 BZOJ4539 题解 我们把每次复制出来的树看做一个点,那么大树实际上也就是一棵\(O(M)\)个点的树 所以我们只需求两遍树上距离: 大树上求距离,进入同一个点后在模板树上再求一次距离 讨论好一些情况即可 然后求子树第\(k\)大的点要用主席树 没了 #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #i…
复制的树缩点,主席树查k小,毫无技术含量,纯码农题. #include<bits/stdc++.h> #define u first #define v second #define F lower_bound #define I (i+j+2>>1) #define J (i+j>>1) using namespace std; int n1,n2,m,n4; typedef long long ll; map<ll,int>nu; const int N…
传送门 题意:给一棵大树,令一棵模板树与这棵树相同,然后进行mmm次操作,每次选择模板树中的一个节点aaa和大树中一个节点bbb,把aaa这棵子树接在bbb上面,节点编号顺序跟aaa中的编号顺序相同. 最后有qqq次询问问大树上两点距离. 思路: 真·树套树 把每棵树所成一个点,然后相当于先把两个点跳到一个块中再求它们的lcalcalca,可以用主席树维护块中编号第kkk大来维护块中对应点,实现块于块之间的跳跃可以用倍增 #include<bits/stdc++.h> #define ri r…
4539: [Hnoi2016]树 题意:不想写.复制模板树的子树,查询两点间距离. *** 终于有一道会做的题了...... 画一画发现可以把每次复制的子树看成一个大点来建一棵树,两点的lca一定在大点的lca里 然后每个大点维护一坨信息:节点编号的区间范围,到根的距离,大点对应子树的根,大点是接在了模板树里哪个点下面 然后做就行了 给出大树上一个点的编号,找到对应的大点可以二分:再找到对应模板树上的点,因为编号是按原大小来的,就是子树k大值,可以用主席树 求距离的时候我分了三种情况: 同一个…
[LG3248][HNOI2016]树 题面 洛谷 题解 因为每次你加入的点是原树上某一棵子树 那么我们一次加入一个点,代表一棵子树加到大树下面 那么我们要找到一个点在一个大点中用主席树在\(dfs\)序中\(kth\)即可 询问的话,先将所有的点权(深度)转化为边权 查询时先将两点跳到它所在大点的根 再倍增跳到大点1(原树)的下面,再在原树上倍增跳一跳即可. 虽然说起来容易,但是其实还是很码的qaq. 代码 #include <iostream> #include <cstdio>…
4539: [Hnoi2016]树 链接 分析: 主席树+倍增. 代码: #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<cmath> #include<cctype> #include<set> #include<queue> #include<vector> #include&l…
[HNOI2016]树(可持久化线段树+树上倍增) 题面 给出一棵n个点的模板树和大树,根为1,初始的时候大树和模板树相同.接下来操作m次,每次从模板树里取出一棵子树,把它作为新树里节点y的儿子.操作完之后有q个询问,询问新树上两点之间的距离 \(n,m,q \leq 1 \times 10^5\) 分析 显然直接把所有节点存下来是不行的,因为节点的个数最多可以到\(10^{10}\).发现本质不同的子树只有n个,我们考虑把子树缩成一个点,构造一棵新树. 新树上的点有3种编号,注意区分: ​ 1…
Description 小A想做一棵很大的树,但是他手上的材料有限,只好用点小技巧了.开始,小A只有一棵结点数为N的树,结 点的编号为1,2,-,N,其中结点1为根:我们称这颗树为模板树.小A决定通过这棵模板树来构建一颗大树.构建过 程如下:(1)将模板树复制为初始的大树.(2)以下(2.1)(2.2)(2.3)步循环执行M次(2.1)选择两个数字a,b, 其中1<=a<=N,1<=b<=当前大树的结点数.(2.2)将模板树中以结点a为根的子树复制一遍,挂到大树中结点b的下 方(也…
Description 小A想做一棵很大的树,但是他手上的材料有限,只好用点小技巧了.开始,小A只有一棵结点数为N的树,结 点的编号为1,2,…,N,其中结点1为根:我们称这颗树为模板树.小A决定通过这棵模板树来构建一颗大树.构建过 程如下:(1)将模板树复制为初始的大树.(2)以下(2.1)(2.2)(2.3)步循环执行M次(2.1)选择两个数字a,b, 其中1<=a<=N,1<=b<=当前大树的结点数.(2.2)将模板树中以结点a为根的子树复制一遍,挂到大树中结点b的下 方(也…