随笔分类 - 最近公共祖先
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4381 [算法] 考虑分块 , 先设一个阈值B = 200 记Su , i表示从u节点开始 , 每次向上跳i步 , 所经过点的权值和 , 可以在O(NBlogN)时间内预处理 对于每次询
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2588 [算法] 如果我们能知道“u到v这条路径上权值<= k的数的个数” , 那么就可以通过二分的方式求出答案 进一步地 , u到v路径上权值<= k的数的个数 = u到根节点路径上权
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5192 [算法] 维护树的直径,在树上离一个点最远的点一定是一条直径的端点。 在直径为(x , y)的树上加入一个叶子结点z,则新的直径必然为(x , y) , (x , z) , (y
阅读全文
摘要:[题目链接] https://codeforces.com/contest/1051/problem/F [算法] 注意边数 - 点数 <= 20 , 我们不妨首先求出图的任意一棵生成树 , 不在生成树内的边最多有21条 , 这些边不同的端点最多有42个 对这些点分别运行Dijkstra最短路 回答
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4326 [算法] 首先,此题的答案是具有单调性的,因此可以二分答案mid 检验答案时,我们判断每条路径的长度是否大于mid,若大于mid,则说明至少要将这条路径上的一条边变为“虫洞” 因
阅读全文
摘要:[题目链接] https://www.luogu.org/problemnew/show/P1967 [算法] 可以证明答案一定为最大生成树上两点路径中的最小值 树上倍增即可 时间复杂度 : O((N + Q) log N)[代码]
阅读全文
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1832 [算法] 最近公共祖先 [代码]
阅读全文
摘要:【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=1602 【算法】 倍增求LCA 【代码】
阅读全文
摘要:【题目链接】 点击打开链接 【算法】 树上倍增,时间复杂度 : O(qklog(n)) 【代码】
阅读全文
摘要:【题目链接】 点击打开链接 【算法】 求出这个图的最小生成树,对于每次询问,用倍增法求出最近公共祖先,查询最小生成树上两点路径上的最大值 算法的正确性? 假设x和y在最小生成树中路径上的最长边为p,那么,根据kruskal算法的执行过程,我们发现p合并 了x和y所在的集合 假设有一条边q,满足q <
阅读全文
摘要:【题目链接】 点击打开链接 【算法】 预处理i^k的前缀和,对于每次询问,树上倍增即可 时间复杂度 : O(nk + mlog(n)) 【代码】
阅读全文
摘要:【题目链接】 点击打开链接 【算法】 分四种情况讨论 : 1. 当前目录和目标目录是同一目录,不需要变换,答案为0 2. 当前目录是目标目录的祖先,答案为当前目录的深度 - 目标目录的深度 3. 当前目录是目标目录的孩子,答案为1 4. 当前目录和目标目录有最近公共祖先,答案为当前目录的深度 - 最
阅读全文
摘要:【题目链接】 点击打开链接 【算法】 离线tarjan求最近公共祖先 【代码】
阅读全文
摘要:【题目链接】 点击打开链接 【算法】 倍增法求最近公共祖先 【代码】
阅读全文
摘要:【题目链接】 点击打开链接 【算法】 tarjan算法求LCA 【代码】
阅读全文
摘要:【题目链接】 点击打开链接 【算法】 LCA + 树上差分 【代码】
阅读全文

浙公网安备 33010602011771号