BZOJ4573:[ZJOI2016]大森林——题解】的更多相关文章

http://www.lydsy.com/JudgeOnline/problem.php?id=4573 https://www.luogu.org/problemnew/show/P3348#sub http://uoj.ac/problem/195 https://loj.ac/problem/2092 小Y家里有一个大森林,里面有n棵树,编号从1到n.一开始这些树都只是树苗,只有一个节点,标号为1.这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力. 小Y掌握了一种…
扫描线,从左到右依次处理每棵树. 用set按时间顺序维护影响了这棵树的所有操作,那么一个点的父亲就是它前面第一个操作1. 用Splay维护树的括号序列,那么两点间的距离就是括号数量减去匹配的括号个数. 添加或删除操作0就是单点换父亲,添加或删除操作1就是区间换父亲.可以通过添加虚点来实现区间换父亲操作. 时间复杂度$O(m\log m)$. #include<cstdio> #include<algorithm> #include<set> using namespac…
bzoj luogu uoj sol \(orz\ \ HJT\ \ dalao\)教会我做这道题. 考虑每两个相邻位置的树的差异. 对于一个1操作(更换生长节点),假设区间是\([l,r]\),那么第\(l-1\)棵树和第\(l\)棵数就会产生一定的差异,具体来说,假设在这之后没有1操作了,那么所有应该在第\(l-1\)棵树中接到原生长节点下面的点都在第\(l\)棵树中被接到了新的生长节点的下面. 我们考虑怎么快速实现这个操作.很显然,我们只要把修改了生长节点后新长出来的点打个包,然后\(cu…
题目描述 小Y家里有一个大森林,里面有n棵树,编号从1到n.一开始这些树都只是树苗,只有一个节点,标号为1.这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力. 小Y掌握了一种魔法,能让第l棵树到第r棵树的生长节点长出一个子节点.同时她还能修改第l棵树到第r棵树的生长节点.她告诉了你她使用魔法的记录,你能不能管理她家的森林,并且回答她的询问呢? 题解 这题太神了,废了我一下午. 看到区间操作,就可以想到差分或者扫描线,我们会发现这题基本没有好的方法去执行批量操作,所以我们…
Description 小Y家里有一个大森林,里面有n棵树,编号从1到n.一开始这些树都只是树苗,只有一个节点,标号为1.这些树 都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力.小Y掌握了一种魔法,能让第l棵树 到第r棵树的生长节点长出一个子节点.同时她还能修改第l棵树到第r棵树的生长节点.她告诉了你她使用魔法的 记录,你能不能管理她家的森林,并且回答她的询问呢? Solution 有点神仙,看了题解的做法 首先显然要离线,否则空间都是错的,这样维护一棵树就好了 然后发现都…
\(\color{#0066ff}{ 题目描述 }\) 小Y家里有一个大森林,里面有n棵树,编号从1到n.一开始这些树都只是树苗,只有一个节点,标号为1.这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力. 小Y掌握了一种魔法,能让第l棵树到第r棵树的生长节点长出一个子节点.同时她还能修改第l棵树到第r棵树的生长节点.她告诉了你她使用魔法的记录,你能不能管理她家的森林,并且回答她的询问呢? \(\color{#0066ff}{输入格式}\) 第一行包含 2 个正整数 n,…
Description: 小Y家里有一个大森林,里面有n棵树,编号从1到n 0 l r 表示将第 l 棵树到第 r 棵树的生长节点下面长出一个子节点,子节点的标号为上一个 0 号操作叶子标号加 1(例如,第一个 0 号操作产生的子节点标号为 2), l 到 r 之间的树长出的节点标号都相同.保证 1<=l<=r<=n . 1 l r x 表示将第 l 棵树到第 r 棵树的生长节点改到标号为 x 的节点.对于 i (l<=i<=r)这棵树,如果标号 x的点不在其中,那么这个操作…
Description 小Y家里有一个大森林,里面有n棵树,编号从1到n.一开始这些树都只是树苗,只有一个节点,标号为1.这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力.小Y掌握了一种魔法,能让第l棵树到第r棵树的生长节点长出一个子节点.同时她还能修改第l棵树到第r棵树的生长节点.她告诉了你她使用魔法的记录,你能不能管理她家的森林,并且回答她的询问呢? Input 第一行包含 2 个正整数 n,m,共有 n 棵树和 m 个操作.接下来 m 行,每行包含若干非负整数表示…
题目链接 题目描述 小Y家里有一个大森林,里面有n棵树,编号从1到n.一开始这些树都只是树苗,只有一个节点,标号为1.这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力. 小Y掌握了一种魔法,能让第l棵树到第r棵树的生长节点长出一个子节点.同时她还能修改第l棵树到第r棵树的生长节点.她告诉了你她使用魔法的记录,你能不能管理她家的森林,并且回答她的询问呢? Sol 一脸毒瘤. 区间 \(link\) 一个叶子 , 显然不能模拟吧... 这种复杂的题显然都是只寻求我们需要知道…
点此看题面 大致题意: 有\(n\)棵树,初始各有\(1\)个编号为\(1\)的节点,且其为生长节点.\(3\)种操作:将\([l,r]\)区间内的树增加一个新的编号的节点,修改\([l,r]\)区间内的树生长节点(没有该节点的树忽略此操作),询问某一棵树上两点的距离(保证存在). 考虑离线 不难发现,无论什么操作,都不会改变原有树的形态,因此,询问的答案是不会变的. 因此,就不难想到离线,从\(1\)到\(n\)枚举每棵树,每次只考虑相邻两棵树之间的差异,然后修改并进行询问. 这也是做这道题的…
题目传送门 Description 现在有 \(n\) 棵以 \(1\) 为根的树,每棵树有一个生长节点,有 \(m\) 次操作,每次操作是下面三种中的一个: 在 \(l\sim r\) 的这些树的生长节点下面增加一个新的节点 将 \(l\sim r\) 的生长节点都变为 \(x\) 查询第 \(x\) 棵树种 \(u\sim v\) 的距离 \(n\le 10^5,m\le 2\times 10^5\) Solution 我们可以发现的是,我们加点或者增加新节点并不会改变已有查询的答案,也就是…
Luogu3348 BZOJ4573 LOJ2092 题解 对于每个\(1\)操作建一个虚点,以后的\(0\)操作都连在最近建好的虚点上.这样每次整体嫁接的时候,直接把这个虚点断掉它原来的父亲,再\(link\)过去就可以了 求在\(x\)位置的两点之间距离 , 只要之前的换点加点操作完成 , 就可以计算 , 而且也要马上计算 , 之后树的形态就又要变了 , 这样保证了复杂度 关于代码 : 先按思路把离线的事件处理出来 然后发现这种离线的利用虚点的转移只能用\(LCT\)维护 注意 : 只有实点…
题链: https://www.luogu.org/problemnew/show/P3348 题解: LCT,神题 首先有这么一个结论: 每次的1操作(改变生长点操作),一定只会会对连续的一段区间产生影响. (即不存在对两段不相连的区间都进行了该操作的情况,令这种情况为[2]) 简单来说就是因为该操作需要对应的那些树存在那个节点. 如果发生了情况[2],即表明区间[l1,r1],[l2,r2]有节点x,且[l1+1,r2-1]无节点x,且r2-1>=l1+1 但是我们的生长操作0操作每次进行的…
传送门 刷了那么久水题之后终于有一题可以来写写博客了. 但是这题太神仙了我还没完全弄懂-- upd:写完博客之后似乎懂了. 思路 首先很容易想到\(O(n^2\log n)\)乘上\(O(\frac{n}{\log n})\)的巨大常数的暴力做法(雾 然后可以发现这题支持把询问抽离出来最后做,那么我们可以先只关注修改操作. 可以发现一个点在\([l,r]\)的树上连上去和在所有树上都连上去其实没有太大区别,只是修改生长节点时要判一下是否存在,其他时候其实可以每一棵树上都连一个,因为不存在的点并不…
传送门 题解 题面大意: \(0.\)区间加节点 \(1.\)区间换根 \(2.\)单点询问距离 如果没有\(1\)操作,因为区间加节点都是加在下面,所以我们可以直接把\(n\)棵树压成一棵树,直接询问即可 有\(1\)操作怎么办? 上面挖掘了一点性质, 加节点加在下面,那么我们可以先把节点都加上去,再询问 那么把操作离线, 先按操作位置排序,再按操作排序(\(0,1\)先),再按时间排序 对于\(0,1\)操作都新建节点 \(0\)建实点 \(1\)建虚点 \(0\)操作的点将连向最后的\(1…
洛谷题目传送门 思路分析 最简单粗暴的想法,肯定是大力LCT,每个树都来一遍link之类的操作啦(T飞就不说了) 考虑如何优化算法.如果没有1操作,肯定每个树都长一样.有了1操作,就来仔细分析一下对不同树的影响. 假设有一个1操作形如\(l\ r\ x\),那么从微观来看差异,我们只关注第l-1棵树和第l棵树.再假设以后都没有了0操作,那么我们可以认为,第l棵树是第l-1棵树把这个1操作以后嫁接在原来生长节点上的所有节点(以及所有子树)全部转而嫁接到x上.再看第r棵树和第r+1棵树,是不是可以认…
http://www.lydsy.com/JudgeOnline/problem.php?id=4573 http://blog.csdn.net/lych_cys/article/details/53515748# lct的难点大概是转换的部分. 这道题需建两种权值不同的点,每次更换生长节点建立权值为0的虚点,生长新点建立权值为1的实点,因为最开始有一个带权值的生长节点,那么建一个虚点一个实点来表示. 因为求的东西追根溯源只是链,每棵树从根到某点的链的结构都是交错的所以可以这样压缩点以及点点之…
「ZJOI2016」大森林 神仙题... 很显然线段树搞不了 考虑离线操作 我们只搞一颗树,从位置1一直往后移动,然后维护它的形态试试 显然操作0,1都可以拆成差分的形式,就是加入和删除 因为保证了操作2的合法性,我们不妨先不计合法性把所有点加到树中 显然每个点要连到在这个点之前的离这个点时间上最近那个1操作的点上 然后可以发现移动时1操作相当于很多个点换根 我们可以对每个1操作建一个虚点,然后就可以很方便换根了 那么如何保证查询操作呢? 可以把每个1操作的虚点大小设成0(代表它父亲边的直接长度…
题目描述 小Y家里有一个大森林,里面有 $n$ 棵树,编号从 $1$ 到 $n$ .一开始这些树都只是树苗,只有一个节点,标号为 $1$ .这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力. 小Y掌握了一种魔法,能让第 $l$ 棵树到第 $r$ 棵树的生长节点长出一个子节点.同时她还能修改第 $l$ 棵树到第 $r$ 棵树的生长节点. 她告诉了你她使用魔法的记录,你能不能管理她家的森林,并且回答她的询问呢? 输入格式 第一行包含 2 个正整数 $n,m$,共有 $n$…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 小 Y 家里有一个大森林,里面有 n 棵树,编号从 1 到 n.一开始这些树都只是树苗,只有一个节点,标号为 1.这些树都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力.小 Y 掌握了一种魔法,能让第 l 棵树到第 r 棵树的生长节点长出一个子节点.同时她还能修改第 l 棵树到第 r 棵树的生长节点.她告诉了你她使用魔法的记录,你能不能管理她…
[LOJ 2092][BZOJ 4573][UOJ 195][ZJOI 2016]大森林 题意 给定一个树序列, 初始时所有树都只有一个点, 要求支持三种操作: 区间种树(在某个特定点上长出一个子结点) 区间更改种树点(就是改上面那个操作中的「特定点」) 查询某棵树上两个点间的距离 \(n\le 1\times 10^5, q\le 2\times 10^5\). 不强制在线. 长出来的点标号一致, 与种树操作的顺序一致. 保证2操作合法. 题解 ZJOI都是神仙题啊QAQ... 首先这题序列上…
bzoj 4573 大森林 由于树上路径是唯一的,查询合法的两个点间路径长度显然与其他加点操作无关,所以可以离线处理,将所有的查询放在加点后. 这样我们可以对每棵树都在上颗树的基础上处理好形态后,处理这颗树上的询问. 考虑若没有操作 \(1\) ,则所有树都一模一样.那么两棵树的形态不同,一定是某一颗执行了操作 \(1\) ,另一个却没有.只需要在每个关键位置(修改开始或结束时)将原来生长点所有子树挂到新的生长点下. 若暴力移动子树,当子树数目较大时就会很劣.可以对每个操作 \(1\) 建立一个…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ195.html 题解 首先询问都可以放到最后处理. 对于操作,我们把它差分一下离线下来. 现在的问题就是从第一棵树到第 n 棵树扫一遍,并不断维护树的形态. 容易感受到这棵树会有删节点之类的操作,所以自然想到 LCT . 但是要涉及一个节点的一些子节点换父亲的时候LCT就GG了. 解决这个问题的办法是建立虚点.虚点权值为 0 ,实点权值为 1,于是我们要维护链上点权和. 建虚点的规则是: 对于每一个操作…
这题理论上可以用ETT,但是用LCT建虚点可以解决这个问题. 对于最晚的操作1建立一个虚点,然后把操作0挂上去. #include<bits/stdc++.h> ; using namespace std; struct Link_Cut_Tree{ ],fa[N],cnt,rev[N],q[N]; inline void newnode(int x){++cnt;size[cnt]=w[cnt]=x;} inline ]!=x&&c[fa[x]][]!=x)||!x;} in…
ref不是太懂-- #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> using namespace std; int n, m, tot, val[200005], fa[200005], idx[200005], num, lf[200005], cnt; int ans[200005], ch[200005][2], sum[200005], rg…
题目描述 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐 士.魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为 1,2,3,-,n,边标号为 1,2,3,-,m.初始时小 E 同学在 1 号节点,隐士则住在 n 号节点.小 E 需要通过这一片魔法森林,才能够拜访到隐士. 魔法森林中居住了一些妖怪.每当有人经过一条边的时候,这条边上的妖怪 就会对其发起攻击.幸运的是,在 1 号节点住着两种守护精灵:A 型守护精灵与 B 型守护精灵.小 E 可以借助它们的力…
http://www.lydsy.com/JudgeOnline/problem.php?id=3669 https://www.luogu.org/problemnew/show/P2387 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐 士.魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为 1,2,3,…,n,边标号为 1,2,3,…,m.初始时小 E 同学在 1 号节点,隐士则住在 n 号节点.小 E 需要通过这一片魔法森林,才能够拜访到隐士. 魔…
题意:问你区间第k大是谁 思路:主席树就是可持久化线段树,他是由多个历史版本的权值线段树(不是普通线段树)组成的. 具体可以看q学姐的B站视频 代码: #include<cmath> #include<set> #include<queue> #include<cstdio> #include<vector> #include<cstring> #include <iostream> #include<algorit…
这道题正解其实是LCT,然而貌似SPFA也可以成功水过,所以根本不知道LCT的我只能说SPFA了. 这道题最大的限制是两种精灵就意味着一条道可能有两个权值,因此我们需要去将其中一个固定,然后再推另一个权值,也就是说,我们可以,枚举每一条边的a,然后只走a值不大于他的边. 然而并没有那么容易,本题数据极大,这种算法一半分都拿不到,因此我们需要别的优化,首先,我们可以现将每个边按照a的大小进行排序,然后从小到大边枚举边加边,这时dis数组就不必去每次spfa都清空了,而且每次枚举边都可以在原来的图的…
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 44540    Accepted Submission(s): 15483 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的…