随笔分类 -  倍增LCA

摘要:解题思路 问题分析 我们需要找到满足以下条件的节点: 删除该节点后,所有好点对仍然连通 删除该节点后,坏点对不连通 关键思路 好点对连通性分析: 如果一个节点在某个好点对的路径上,删除它会导致该好点对不连通 因此,能被删除的节点不能在任何好点对的路径上 使用树上差分标记所有好点对路径上的节点 坏点对 阅读全文
posted @ 2025-10-08 18:20 CRt0729 阅读(41) 评论(0) 推荐(0)
摘要:解题思路 这个问题需要在有根树上模拟移动操作,但直接模拟会超时(因为移动次数可能很大)。核心思想是使用二进制提升(Binary Lifting)技术来优化移动过程。 关键观察: 向上移动(移动到父节点):可以使用倍增表 f[i][j] 表示从节点 i 向上移动 2^j 步到达的节点 向下移动(移动到 阅读全文
posted @ 2025-09-27 18:43 CRt0729 阅读(38) 评论(0) 推荐(0)
摘要:解题思路与代码注释 解题思路 这道题目要求计算树中路径上所有节点深度的k次方和。关键在于如何高效处理大量查询,每个查询可能有不同的k值。 核心思路: 预处理深度和幂次和: 使用DFS计算每个节点的深度 预处理每个节点到根节点路径上所有节点的深度k次方和(s[x][k]),其中k的范围是1到50 LC 阅读全文
posted @ 2025-05-27 21:09 CRt0729 阅读(38) 评论(0) 推荐(0)
摘要:P3379 【模板】最近公共祖先(LCA)为例题 1.公共祖先: 一棵树上,有父节点和子节点,那么如何才能知道两个节点的共同祖先是谁?拿左图为例,假设4是整个树的祖先,那么(5,3)的公共祖先就有1和4 2.最近公共祖先LCA: 显然(5,3)有两个公共祖先1和4,那么请问如何才能求出距离(5,3) 阅读全文
posted @ 2025-05-10 21:49 CRt0729 阅读(14) 评论(0) 推荐(0)
摘要:void dfs(int x,int fa) { dep[x] = dep[fa] + 1; f[x][0] = fa; for(int i = 1; i <= 20; i++){ int y = f[x][i - 1]; f[x][i] = f[y][i - 1]; //这个状态转移需要简单示例演 阅读全文
posted @ 2025-05-09 19:27 CRt0729 阅读(36) 评论(0) 推荐(0)
摘要:解题思路 本题需要解决的是在带权无向图中,找到两点间路径的最小边权的最大值(即最大瓶颈路)。核心步骤包括: 构建最大生成树:使用Kruskal算法,确保路径上的最小边权尽可能大 预处理LCA和路径最小值:使用倍增法预处理每个节点的祖先信息和路径最小边权 查询处理:对于每个查询,通过LCA找到路径并确 阅读全文
posted @ 2025-04-29 19:52 CRt0729 阅读(59) 评论(0) 推荐(0)
摘要:解题思路 这道题目要求我们在树结构中找到三个节点的最佳集合点,使得三人到达该点的总距离最短。关键点在于: 树的性质:n个节点n-1条边的连通无向图 LCA应用:利用最近公共祖先来高效计算节点间距离 集合点选择:三个节点的最佳集合点必定是某两个节点的LCA #include<bits/stdc++.h 阅读全文
posted @ 2025-04-29 18:54 CRt0729 阅读(54) 评论(0) 推荐(0)
摘要:解题思路 本题是一道典型的树上差分问题,结合了LCA(最近公共祖先)算法。题目要求我们统计树中每个节点被多少条路径覆盖,并找出被覆盖次数最多的节点。 关键步骤 LCA预处理:使用倍增法预处理每个节点的各层祖先信息,以便快速查询任意两点的LCA 树上差分: 对于每条路径s→t,在s和t节点处+1 在它 阅读全文
posted @ 2025-04-29 17:02 CRt0729 阅读(90) 评论(0) 推荐(0)
摘要:解题思路 本题是经典的最近公共祖先(LCA)问题,使用倍增算法进行高效求解。倍增算法通过预处理每个节点的各层祖先信息,使得查询时能够快速跳跃查找,达到O(logN)的时间复杂度。 关键步骤 预处理阶段: 使用DFS遍历树结构,记录每个节点的深度和直接父节点 预处理每个节点的2^i级祖先(倍增思想) 阅读全文
posted @ 2025-04-29 16:50 CRt0729 阅读(137) 评论(0) 推荐(0)
摘要:解题思路 这道题目是关于斐波那契数列和最近公共祖先(LCA)的问题。题目描述了一个兔子繁殖的模型,这个模型遵循斐波那契数列的规律。 关键观察 斐波那契树结构:兔子的编号和繁殖方式形成了一个类似斐波那契树的结构。每个月的兔子数量遵循斐波那契数列增长。 祖先关系:在斐波那契树中,任意一个兔子编号可以表示 阅读全文
posted @ 2025-04-29 16:47 CRt0729 阅读(33) 评论(0) 推荐(0)
摘要:描述 Y 岛风景美丽宜人,气候温和,物产丰富。Y 岛上有 N 个城市,有 N−1 条城市间的道路连接着它们。每一条道路都连接某两个城市。幸运的是,小可可通过这些道路可以走遍 Y 岛的所有城市。神奇的是,乘车经过每条道路所需要的费用都是一样的。 小可可,小卡卡和小 YY 经常想聚会,每次聚会,他们都会 阅读全文
posted @ 2023-10-15 15:55 CRt0729 阅读(32) 评论(0) 推荐(0)
摘要:描述 Dark 是一张无向图,图中有 N 个节点和两类边,一类边被称为主要边,而另一类被称为附加边。Dark 有 N–1 条主要边,并且 Dark 的任意两个节点之间都存在一条只由主要边构成的路径。另外,Dark 还有 M 条附加边。 你的任务是把 Dark 斩为不连通的两部分。一开始 Dark 的 阅读全文
posted @ 2023-10-12 16:45 CRt0729 阅读(80) 评论(0) 推荐(0)
摘要:描述 给出 n 个点的一棵树,多次询问两点之间的最短距离。注意:边是双向的。 输入描述 第一行为两个整数 n 和 m。n 表示点数,m 表示询问次数;下来 n−1 行,每行三个整数 x,y,k,表示点 x 和点 y 之间存在一条边长度为 k;再接下来 m 行,每行两个整数 x,y,表示询问点 x 到 阅读全文
posted @ 2023-09-28 01:55 CRt0729 阅读(161) 评论(0) 推荐(0)
摘要:描述 给定一棵 n 个点的树,Q 个询问,每次询问点 x 到点 y 两点之间的距离。 输入 第一行一个正整数 n,表示这棵树有 n 个节点; 接下来 n−1 行,每行两个整数 x,y表示 x,y 之间有一条连边; 然后一个整数 Q,表示有 Q 个询问; 接下来 Q 行每行两个整数 x,y 表示询问 阅读全文
posted @ 2023-09-15 15:41 CRt0729 阅读(51) 评论(0) 推荐(0)