首页 > TAG信息列表 > 虚树
虚树
一种大树变小树的方法。大概就是只保留题目要求的关键点和其他一些统计答案必须的点,把剩余的所有点从树上砍掉。原理是维护一条最右链(就是我们扫到的最右边的一条链,它左边的虚树已经建好)。 具体的操作: 首先把所有的关键点按照dfs序排序。然后开始分讨: 如果栈空则节点入栈。 找到dfs序 括号序 欧拉序 树上莫队 虚树建立 傻傻分不清
括号序 进加一次,出加一次,显然最后得到的序列只有 \(2n\) 个点。 void dfs(int x) { in[x]=++tot; for(y) dfs(y); out[x]=++tot; } 显然我们希求将树上路径表示为区间,然后用莫队抑或是其它数据结构维护。 对于 \(y\in T_x\) 的情况就是上图,我们发现只要取 \([in_x,in_y]\)洛谷 P6668 - [清华集训2016] 连通子树(虚树+点分治)
洛谷题面传送门 一道思维难度为 \(<\epsilon\) 的题。 首先先考虑单组询问的情况。有个究极暴力的做法,\(dp_{i,x,y,z}\) 表示 \(i\) 子树内三种颜色个数分别为 \(x,y,z\) 的连通块个数,转移相当于合并两个连通块,只能 \(O((na+1)^2(nb+1)^2(nc+1)^2)\) 地进行,因此单组询问复杂度 \(n虚树学习笔记
「虚树」学习笔记 \(\mathcal{Part.1}\) \(\texttt{引子}\) P2495 [SDOI2011] 消耗战:给定 \(n\) 个点的树,边有边权,\(m\) 次询问,每次给定 \(k_i\) 个点,问最少要炸毁多少条边,使得 \(1\) 不能到达任何一个给定的点。\(1\le n\le 2.5\times 10^5\),\(1\le m\le 10^5\)。 \(\Theta(nm)树分块小结
树分块 我们发现我们可以对序列分块,值域分块,时间分块,然后分块的本质就是把大小为 \(n\) 的一个集合划分为 \(O(\frac nB)\) 个大小为 \(O(B)\) 的块,所以我们可以对树也进行分块 转序列分块 一个非常 \(naive\) 的想法是我们求出树的 \(dfs\) 序,然后序列分块,这样可以保证: 1.一个点镜花水月, 树虚点实: 虚树学习笔记
Virtual Tree 揭开华丽的外衣, 关注问题的本质. 这就是虚树在做的事情, 所以虚树不虚, 反而是虚伪原树中最实在的部分, 所以它更应该被称作 "实树". 它在实际问题中常常回答完问题后就转瞬即逝, 所以给人的印象就是镜花水月一般的虚无飘渺, 现实中敢讲真话的人也有很多就这虚树一我做过的题们(树&动态规划)
3.树 树上简单问题 [JSOI2015]字符串树 STL大法好啊啊啊! 重链剖分&长链剖分 Milk Visits G 离线处理,重链剖分题目。 [国家集训队]旅游 一道简单的树链剖分题目,不知为何评紫。 Dominant Indices 长链剖分模板。 实链剖分(LCT) 【模板】动态树(Link Cut Tree) 模板。 [COI20LGP8203口胡
首先我们对所有的 \(t\) 建出广义 sam,然后把所有 \(s\) 的信息丢到这个广义 sam 上面去。问题就变为了每个串 \(t\) 对应一个大小为 \(|t|\) 的点集,求两个点集的虚树的交的点权和。 虚树交这种东西看上去比较奇怪,考虑根号分治。 首先我们先使用 \(O(n\log n)-O(1)\) 的 LCA。 考虑虚树学习笔记(待填坑)
虚树学习笔记 问题的引入 在树上 DP 的问题中,可能有多次询问,每次询问包括的总点数规模较小(例如 \(10^5\))。我们记节点数为 \(n\),询问次数为 \(m\),询问中总点数为 \(\sum k\),那么直接在整棵树上暴力 DP 的复杂度为 \(\mathcal{O}(nm)\),不可接受。能不能发明一种 DP 的方法,不需要访2022.1.5 模拟赛
板子大赛? [ZJOI2012]灾难 DAG 支配树板子。 「AHOI / HNOI2018」毒瘤 取一个生成树,非树边很少,暴力枚举关键点状态,动态 DP 求独立集个数。 如果是枚举关键点的所有合法情况,DP 转移中的乘积可能为 \(0\),树剖的轻儿子需要线段树维护; 如果是枚举冲突的非树边来容斥,乘积不可能为 \(0\),2022.1.5 模拟赛
板子大赛? [ZJOI2012]灾难 DAG 支配树板子。 「AHOI / HNOI2018」毒瘤 取一个生成树,非树边很少,暴力枚举关键点状态,动态 DP 求独立集个数。 如果是枚举关键点的所有合法情况,DP 转移中的乘积可能为 \(0\),树剖的轻儿子需要线段树维护; 如果是枚举冲突的非树边来容斥,乘积不可能为 \(0\),ybtoj&洛谷P4426:毒瘤(虚树,环套树,暴力)
传送门 解析 顾名思义,十分毒瘤 但有一说一,相对来说这题没有之前做的那两个黑题那么(重读)恶心 而且本题如果放在考场上,暴力枚举非树边的状态dp就可以拿到70分的好成绩(改一改能改到75) 现在考虑正解 注意到,每次暴力枚举非树边的状态进行dp时,状态发生改变的其实来来回回就是少数的bzoj3572 世界树(虚树,倍增)
题目链接 解题思路 题目的问法很明显是虚树题的问法。根据询问点建虚树,因为虚树不止有询问的点,还有他们的lca,所以先对建出来的虚树预处理出来虚树上每个点离他最近的议事处的距离和点的编号(自己就是议事处肯定就是自己,主要是对增加的lca进行处理)。因为最近的点可能来自下面虚树 virtual-tree
我们发现,如果一棵树中真正需要处理的点很少,而总共点数很多时,可以只处理那些需要的点,而忽略其他点。 因此我们可以根据那些需要的点构建虚树,只保留关键点。 oi-wiki上对虚树的介绍 我们根据一下方式建立虚树: 现将所有需要处理的关键按照欧拉序排序。 用一个栈维护一条从根节点虚树
虚树是什么 对于一棵树,如果我们多次查询,第 \(i\) 次查询,给出树上的 \(k_i\) 个节点,查询它们公共的信息、互相的贡献等等。每次 dfs 整棵树,时间复杂度是 \(O(nT)\) 的。但是如果我们每次查询把无用的节点删除,只保留 \(k_i\) 个节点以及他们的 lca,那么最多会有约 \(2k_i\) 个节点,再虚树学习笔记
\[\huge \rm 虚树 \] \[\Large\rm 算法简介 \]\(\quad\)在一些问题中,我们只关心一些关键点的信息,同时我们需要维护他们之间的树形结构,于是可以想到将它们和它们之间的 \(\rm LCA\) 拉出来建一颗树,这棵树就被称作虚树。 \(\quad\)有一个朴素的想法,就是对它们两两求 \(\rm LCA\),并且虚树
虚树一般用于树形DP中,此类问题通常询问次数很多但每次询问涉及到的点数很少。若每次询问均对整棵树进行DP,时间复杂度是巨大的。所以我们采用虚树这种数据结构。 虚树的构建 虚树由询问点和询问点的LCA构成。 我们可以先处理出原树的dfs序,从dfs序由小到大来遍历询问点,并通过栈来维题解 P3233 [HNOI2014]世界树
题目传送门 解题思路 正解当然是虚树了。 首先对于原树以及虚树各开一个结构体存边,这个不用多说。 然后我们先 DFS 一遍,求出各个节点的时间戳,子树大小,深度以及父亲节点,并初始化倍增 LCA 。 对于每一次的操作,我们都建一棵虚树(注意数组的清空),为了方便,我们此后操作的 DFS 都从 1 节BZOJ2286: [Sdoi2011]消耗战(虚树/树形DP)
Time Limit: 20 Sec Memory Limit: 512 MB Submit: 5246 Solved: 1978[Submit][Status][Discuss] Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达。现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的虚树的学习笔记
虚树是用来解决树上的一些特定点问题的好方法。建立虚树的本质是缩二度点。具体来讲是这样的: 维护一个栈,表示虚树的最右链。栈从顶到底深度递减。一开始先 push 进根,方便操作。下面定义 stk[x] 为从栈顶向下数的第 x 个元素。 当加入一个点的时候,执行下述操作: 若栈只有根元素,那20210526总结
20210526总结 怎么说呢,体验极差。 T1:昨天学了虚树今天就用上了,虽然正解并没有用到虚树。一开始看到 \(\sum k_i\le10^5\) 想到了虚树,但是知道虚树题难点不是建虚树,而是树上的操作,例如数据结构和dp,这一题显然是dp。于是并没有像 jyh 一样先码了一个虚树代码。dp式子想了好久,由于复【UR #20】跳蚤电话
题意 uoj 做法 第一次打uoj比赛,居然有签到题,体验良好qwq 容易观察到,一个点一旦加入\(S\)就不会再出来,且边形成了一个虚树。 任意时刻,操作为在虚树中的某条边中间选取一个点加进来,或在外面选取一个点,与虚树的一个叶子连边。 自然的,会想到对于一棵树,目前\(S=\{root\}\),枚举一个点\(x虚树
https://blog.csdn.net/weixin_37517391/article/details/82744605 void insert(int u){ if(top <= 1) {stk[++top] = u;return ;} int lca = LCA(u,stk[top]); if(lca == stk[top]) {stk[++top] = u;return ;} while(top > 1 && dfn[lca] <【ybt金牌导航5-3-1】【luogu P3233】世界树 / 虚树例题
世界树 题目链接:ybt金牌导航5-3-1 / luogu P3233 题目大意 有一棵树,边的权值都是 1。然后有一些特殊点,对于每个点,它会被离它距离最近的特殊点占有。 然后不同的时刻特殊点也会不同,问你在每个询问,每个特殊点会各占有多少个点。 (可以自己占有自己) 思路 你首先看到它只要特殊点的值,然「笔记」虚树
写在前面 以前写的太简略了,重新来总结一下。 如果您是初学者建议配合阅读 虚树 - OI Wiki 上的图示阅读。 概念 对于树 \(T=(V,E)\),给定关键点集 \(S\subseteq V\),则可定义虚树 \(T'=(V',E')\)。 对于点集 \(V'\subseteq V\),使得 \(u\in V'\) 当且仅当 \(u\in S\),或 \(\exist x,y