随笔分类 - 树
摘要:题目链接 链接 翻译 给你 个向量, 每个向量都是 维的,在他们之间你可以做任意次数的模 加法,用 表示你能用这些向量得到的向量, 然后 问你用 个向量中最少多少个向量就已经足够表示出 了,设这个最少用的向量集合为 ,
阅读全文
摘要:题目链接 链接 翻译 让你给一棵树上的边染色,然后对于颜色为 的边, 只保留这些边,形成一个 子图,然后 不是可能会组成很多个联通分量吗?则这个 子图的权重就为所有联通分量的权重最大值。(联通分量的权值为各个节点加和) 你最多可以使用 种颜色的边,\(
阅读全文
摘要:题目链接 链接 翻译 给你一棵树,树上的每一个节点都带有权值。 让你统计这样的点 的个数,使得以 为根的时候,所有以 开始,以某个节点结束的路径中每个节点的权值 都是唯一的,即每个权值都只出现了一次。 称这样的 为 \(distinctive\ roo
阅读全文
摘要:题目链接 链接 翻译 让你构造一棵树,使得任意两个叶子节点之间路径的权重异或和为 。 并且,树中用到的边的权重的不同值的个数设为 ,让你求 的最大值和最小值。 题解 最小值不会超过 。 可以转化为是在给每个点标记数字,然后边上的权重就是连接它们两个点上标的数字的异或
阅读全文
摘要:题目链接 点我呀 翻译 给你一棵树,一个人()在 处,一个人()在 处,其中 每次可以移动到距离(经过的边的个数)为 以内的任意一个点上, 每次可以移动到距离为 以内的任意一个点上。 在 \(a
阅读全文
摘要:题目链接 点我呀 翻译 高度为 的一棵 树可以由高度为 的一棵 树通过这样的规则构造出来: 在高度为 的 中,对于只有一个孩子的节点,加上两个孩子节点,没有孩子的节点加上一个节点。 问你高度为 的 \
阅读全文
摘要:题目链接 点我呀 翻译 给你一棵树, 让你在这棵树上选择恰好k个点, 这k个点是发展工业的, 然后其余的n - k个点发展旅游业。 但是根节点(约定1号节点是根节点)例外, 它可以发展旅游业也可以发展工业(不过后面会发现这条件没啥用。。)。 假设x是你选出来的k个点中的一个, 对于所有的x, 你需要
阅读全文
摘要:理解的精髓在于用"栈"来取代递归,出栈的操作其实就相当于某层递归的出口 【前序遍历】 用栈来替代递归的过程(因为递归归根到底也是用栈来实现的) 考虑递归的时候 每进入一个递归都会往左子树试探,因此一直往左子树走到头,遇到一个节点就访问它 然后压入栈中 访问完左子树之后再回过头继续对每个节点的右子树进
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 题意 【题解】 树的最长链是一定会经过两个叶子节点的。 我们可以构造一棵树,让最后的最长链一定是由经过根节点的两条链组成。 然后让这两条链的长度尽可能短就好。 那么创建k个叶子节点,然后从左往右依次加上去就好,即让每一条叶子节点到根节点的路径都竟可尽可能
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 问你一棵树上有多少条长度为k的路径 【题解】 树形dp 设 size[i]表示以节点i为根节点的子树的节点个数 dp[i][k]表示以i为根节点的子树里面距离节点i的距离为k的节点有多少个. 长度为k的路径有两种情况. 1.这个路径从x开始,只经过x的一
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 【题解】 先处理出来任意一棵树。 然后把不是树上的边处理出来 对于每一条非树边的点(最多21 2个点) 在原图上,做dijkstra 这样就能处理出来这些非树边上的点到其他任意点的最短路了。 然后对于询问x,y 先用LCA+预处理,求出树上的最短路。 接
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 【题解】 找到度数为1的点。 他们显然是叶子节点。 然后每个叶子节点。 往上进行bfs. 累计他们的父亲节点的儿子的个数。 如果都满足要求那么就继续往上走。 直到不能走。或已经走了k步。 且要求走了k步之后。他们都到了同一个节点。(根节点 这道题。 n=
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 【题解】 首先,因为高度是h 所以肯定1下面有连续的h个点依次连成一条链。 用了h+1个点了 然后,考虑d这个约束。 会发现,形成d的这个路径,它一定是经过节点1比较好。 因为这条路径有两种可能 1.经过了1节点 2.没有经过1节点,那么肯定是1的某个子
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 给你一棵树。 让你统计其中子树T的数量。 这个子树T要满足最大值和最小值之差小于等于d 树形DP 可以枚举点root为子树的根。 统计以root为根的子树的个数。 根据每个儿子节点选或者不选。 如果选。则看看它是否满足以下条件:
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 有个性质。 如果p/q是分数的最简形式。 那么p/q能化成有限小数。 当且仅当q的质因数分解形式中只有质因子2和5 (且不能出现其他质因子) (也就是说q的质因子只能出现10的质因子里面出现过的 因为只有这样分母才能化成10^n
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 做这题之前先要知道二叉排序树的一个性质。 就是它的中序遍历的结果就是这个数组升序排序。 (且每个节点的左边的节点都是比这个节点的值小的,每个节点的右边的节点都是比这个节点的值大的。 则我们把原数组排序。 然后在这里面找到原来数组
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 最近公共祖先。 (树上倍增 一开始统计出每个子树的节点个数_size[i] 如果x和y相同。 那么直接输出n. 否则求出x和y的最近公共祖先。z (假定y的深度大于x 【1】如果z等于x或y中的一个。 那么久就找到x..y的路径
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 从根节点开始。 显然它是什么颜色.就要改成对应的颜色。(如果上面已经有某个点传了值就不用改 然后往下传值。 【代码】 cpp include using namespace std; const int N = 1e4; int
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 显然只有当a[i]和a[i 1]都大于1的时候才会有不同的情况。 a[i] = a[i 1] 且a[i 1] =2 则第i 1层的a[i 1]个节点,每个节点下面接一个第i层的节点. 然后剩下的a[i] a[i 1]个都放在第i
阅读全文
摘要:【链接】 "我是链接,点我呀:)" 【题意】 在这里输入题意 【题解】 秤砣都是在叶子节点。 可以把它看成一个二叉树。 则我们每次只需要选择任意两个"节点",让他们组成一棵二叉树就可以了。 然后虚拟出来一个节点,代表这个子树的根节点。 每次维护一下每个子树的左子树最左端离树的中心距离以及最右端离树的
阅读全文