必须摸了...不摸,就无法生存。 第七日,树上启发式式合并。 1~3、树上启发式合并 4、树上倍增+启发式合并 虽然式四道紫题,但是会写一题之后其余三题相对很容易的。整理如下: 一、树上启发式合并 0、前置: 重孩子:父节点的所有孩子节点中子树节点数最多的那个节点 轻孩子:除了重节点外其
树上众数 题目链接:ybt金牌导航6-2-2 题目大意 给你一个树,树上点有颜色编号。 对于每个子树,问你在这个子树中,出现次数最多的颜色的编号和。 思路 首先我们考虑暴力。 就枚举每个子树,然后进行判断,然后再清空你判断的结果和每个出现的次数。 那我们可以按 \(dfs\) 序搞每个子树,然后当
传送门 比较综合的一道题。 解题思路 求把一条边变为0后这m条路径中的最短值,最大值最小,可以二分求解。 如何check某个答案x是否合法? 实质就是判断能否找到一条边,使得大于x的路径都经过这条边,并且减去这条边边权后路径长度都小于等于x。 于是我们先预处理出要求的路径的原长度(倍增
6.9 树上问题 -*Miracle* 树的重心 去掉这个点后最大连通块最小。 重心求法: \(dfs\) 中记录 \(size\) 点分治 统计树上路径的神器 基本思路: 分层 / 连通块统计所有过当前连通块重心的路径 找重心 - 统计所有过重心的路径 - 去掉重心 - 递归处理剩下的连通块 时间复杂度 \(O(n\log
洛谷题目 看到题面,很容易就想到,这是要你找树上的重心,只不过这个重心是在带边权的树上 所以对于这个我们在树上找这个重心 一开始我想的是,我要更新权值,然后把每个点的答案更新一下 就取最大值,这好像是O(....),我也不会算这个复杂度,好像太大了 后来去学习了一下,点分树;; 知道了有点分树
题面 一个树形dp, 我们根据题意去想如何得到两两距离,发现一条边的两侧每有一对同色点,这条边就要被经过一次 在当前的子节点的子树中,枚举有k个黑点,需要一个在其他子树中选了共 j - k 个黑点的状态 code #include<bits/stdc++.h> #define int long long using
春怨 作品名称:《春怨》 作者:刘方平 书者:李明打起黄莺儿,莫教枝上啼。啼时惊妾梦,不得到辽西。诗赏析《春怨》是唐代诗人刘方平创作的一首七言绝句。这首诗抒发宫嫔失宠的幽怨。一二句写出宫人的寂寞和内心的愁怨,住着金屋,可见曾经宠幸,如今君王不再眷顾,因此终日以泪洗面。三
树上带修莫队 前置当然是莫队算法, 带修莫队, 树上莫队. 树上带修莫队是这三者的结合体. 因为已经掌握了带修莫队和树上莫队, 所以需要阐述的东西不多, 直接结合经典题糖果公园分析该算法. 题面简述 一棵树, \(n\) 个点, 每点颜色为 \(m\) 中颜色中的一种. \(V_i\) 表示第 \(i\)
如果有同学需要我的代码的话可以私我要 当然由于本人很菜,代码不一定是对的,但是一定是过了自己造的对拍 D1T1 Sum Transformation 假设原矩阵第\(i\)行的和是\(a_i\),第\(j\)列的和是\(b_j\),整个矩阵的和是\(S\) 那么变换一次以后\((i,j)\)的位置就会变成\(a_i+b_j\) 考虑变换的第
一、思维导图 二、重要概念的笔记 二叉树: 1.非空二叉树中的叶子结点的数量等于双分支结点(度为2的结点)的数量加1。 2.二叉树的第i层上最多有(i>=1)个节点。 BST: 1.左子树上所有结点的值均小于或等于它的根结点的值。 2.右子树上所有结点的值均大于或等于它的根结点的值
题目: 自从见识了平安夜苹果的涨价后,Lele就在他家门口水平种了一排苹果树,共有N棵。 突然Lele发现在左起第P棵树上(从1开始计数)有一条毛毛虫。为了看到毛毛虫变蝴蝶的过程,Lele在苹果树旁观察了很久。虽然没有看到蝴蝶,但Lele发现了一个规律:每过1分钟,毛毛虫会随机从一棵树爬到相
补题链接:Here LCA 算法讲解:Here 考虑用 \(f[i][j]\) 表示从i往上走,能买珠宝的第 \(2^j\) 个点是哪个,显然,如果我们知道每个 \(f[i][0]\)的值, 那么 \(f[i][j]=f[f[i][j−1]][j−1]\) ( i 往上的第2 ^j−1 个点再往上 2^j−1个点)。那么 \(f[i][0]\) 怎么求呢?肯定不能暴力,因为暴力
目录P1099P5659P5666 P1099 直接把直径揪出来从一边到一边扫过去就行了。 【记录】 P5659 按照字典序贪心,对每个点维护相邻的边的删除顺序, 实际上细节并不多。 【记录】 P5666 考虑计算每个点作为重心的次数。 首先把随便一个重心拿出来做根, 然后显然 x 要想作为重心就不能切 x
III.BZOJ3784: 树上的路径 思路1: 淀粉质。用priority_queue维护前\(m\)长的路径的长度。用multiset维护点分治时,之前所有子树的路径长度,然后对于新子树中的每一条路径,在multiset中从大往小枚举另一半路径拼一起并尝试加入优先队列。如果加入失败,那么对于这个点,集合中再往前的数也
IV.树上游戏 考虑淀粉质。 对于一棵分治树,我们考虑对树中所有LCA为根节点的路径计算贡献。 我们对于根节点一棵子树一棵子树地处理。设\(cnt_i\)表示子树外有多少条以根节点为一个端点的路径上有颜色\(i\)。则我们当前子树中的一个点的贡献可以分作两部分:子树外的部分(即\(\sum cnt
题目 题解 这道题就是看每一个点到其他点的距离和是多少。数据范围告诉我们 绝 对 不 能 用暴力求解(TLE自动机.jpg)。因为本题满足树的性质且很明显答案之间有某种联系(真实原因:看题目)所以考虑DP求解。 分析题目可知,所求的值就是以第
这题好妙啊,看讨论区很多做法,但我都不会^ ^ http://www.51nod.com/Question/Index.html#questionId=1542&isAsc=false 讨论区kczno1大佬的做法: dfs一遍,每个深度记每个字母的奇偶性,这个用一个二进制数就可以了。 然后对每个询问 用该层进入子树前的数^退出子树时的数,判断它是否全0或
原题链接:https://www.luogu.com.cn/problem/P3178 树上操作 题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的
实现把一个树的结点拖拽至另一个树上,主要用的是vue+elemenui。 先放一下效果图。 以下是实现的代码。 <template> <div> <el-row> <el-col :span="12"> <div > <el-tree
洛谷日报 例题 #include<bits/stdc++.h> using namespace std; typedef long long ll; #define inf 0x3f3f3f3f #define endl '\n' struct edge{ int nxt,to; }e[200050]; ll col[100050],cnt[100050],ans[100050],sum,mx; int head[100050],a[100050],ct,sz[1
链接:https://ac.nowcoder.com/acm/contest/11334/J 来源:牛客网 题目描述 牛牛苦练武功绝学——轻功水上漂,最终没有练成,但是他学会了在树上行走的本领。 这天,牛牛落入了敌人的陷阱,身后有巨石追击,面前有n个点,n-1条边连成一张连通图(一棵树),现在牛牛必须立马选择进入这张图中,但是
目录一类简单的树上找最小连通块问题问题描述解决方法其他扩展问题和字符串算法的结合例题 一类简单的树上找最小连通块问题 问题描述 给定一棵 \(n\) 个点的树,边有边权,再给定若干个关键点,求最小的包含所有关键点的连通块的边权和。 解决方法 直接讲结论吧,首先 \(\rm dfs\) 得出树
Link 按点来算贡献的话并不好算。考虑到路径长度和可以拆分成每条边的长度乘上其被经过的次数,所以统计边的贡献就可以了。树上一条边会将树分成两边,而该边被经过的次数实质上就是两边的白点个数之积加上黑点个数积。因为定了根,所以其中一边可以按子树考虑,于是就转换成了树形dp。 #
在讲树上差分之前,首先需要知道树的以下两个性质: (1)任意两个节点之间有且只有一条路径。 (2)根节点确定时,一个节点只有一个父亲节点 这两个性质都很容易证明。那么我们知道,如果假设我们要考虑的是从u到v的路径,u与v的lca是a,那么很明显,如果路径中有一点u′已经被访问了,且u′≠a,
算是补了去年磊哥拉的题,早上先学了两节课点分治1,然后发现别人总结出的点分治用于求与树上两点之间的路径或者是点对的问题 分析了一下为什么能够通过算出一个点对于问题的贡献之后再无视这个结点,也就是删除了这个结点解决问题, 设两点之间的路径必定经过x点,x点能在树上形成的贡献是