
LCA
文章平均质量分 55
最近公共祖先
李峻枫
这个作者很懒,什么都没留下…
展开
-
L - 芜湖塔台请求起飞
L - 芜湖塔台请求起飞题目大意给出一棵大小为nnn的树,有如下操作:更改一个节点的权值查询从x到y路径上的权值和查询从x到y路径上的最大权值题解如果是在一个序列中,上面的操作非常容易用线段树来完成,但是在树上并不能。于是就要想一个办法使得树变成一个序列。很显然,就是树链剖分。利用倍增求LCA,然后分别就是从x到LCA与从y到LCA的答案。修改操作就直接在线段树上完成。时间复杂度线段树上一次查询的复杂度是O(logn)O(\log n)O(logn)的,因为重边是连在dfn原创 2021-10-07 08:12:13 · 410 阅读 · 0 评论 -
JZOJ5883. 【NOIP2018模拟A组9.25】到不了
Descriptionwy 和 wjk 是好朋友。今天他们在一起聊天,突然聊到了以前一起唱过的《到不了》。“说到到不了,我给你讲一个故事吧。”“嗯?”“从前,神和凡人相爱了,愤怒的神王把他们关进了一个迷宫里,迷宫是由许多棵有根树组 成的。神王每次把两个人扔进其中的某一棵有根树里面,两个相邻节点的距离为 1,两人的 每一步都只能从儿子走到父亲,不能从父亲走到儿子,他们约定,走到同一个节点相...原创 2018-09-28 22:22:25 · 265 阅读 · 0 评论 -
JZOJ5895. 【NOIP2018模拟10.5】旅游
题解很显然,一条边至少走一次,最多走两次,先建一棵最小生成树,对于一条不在树上面的边,就将与它在最小生成树上构成的边的权值全部加一。最后权值为偶数的边边权算两次,其余的都算一次。如果被其他非最小生成树上面的经过偶数次,也就是要原路返回。code#include <cstdio>#include <iostream>#include <algori...原创 2018-10-06 20:55:38 · 263 阅读 · 0 评论 -
JZOJ5852. 【NOIP2018提高组模拟9.6】相交
题目大意在一棵树上面,给出两条路径,判断是否有交集。题解利用路径的lca还有是否在子树里面就可简单的判断。code#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <string.h>...原创 2018-09-07 21:20:33 · 217 阅读 · 0 评论 -
JZOJ4899. 【NOIP2016提高A组集训第17场11.16】雪之国度
Description雪之国度有N座城市,依次编号为1到N,又有M条道路连接了其中的城市,每一条道路都连接了不同的2个城市,任何两座不同的城市之间可能不止一条道路。雪之女王赋予了每一座城市不同的能量,其中第i座城市被赋予的能量为Wi。 如果城市u和v之间有一条道路,那么只要此刻雪之女王的能量不小于|Wu-Wv|,这条道路就是安全的。如果城市u和v之间存在两条没有重复道路的安全路径(其中原创 2017-12-29 22:06:23 · 395 阅读 · 0 评论 -
JZOJ5466. 【NOIP2017提高A组冲刺11.9】玩游戏
Description小A得了忧郁综合症,小B正在想办法开导她。 机智的小B决定陪着小A玩游戏,他从魔法的世界里变出一张无向联通图,每条边上都有边权。小B定义一条路径的权值为所有经过边中的最大权值,小A则定义两点的最短路径为所有路径中权值最小的路径权。 每次小A和小B会选出k对点mi_1,mi_2,分别计算出mi_1,mi_2的最短路径ti,然后小B会拿出k堆灵魂宝石,每堆有ti个。然后小A先从原创 2017-11-09 21:09:17 · 527 阅读 · 0 评论 -
JZOJ5275. 水管
题解最小代价就一定是最小生成树, 这很显然。 但是这样只有40分,关键还是在判断方案是否唯一。我们知道最小生成树有一个环切性质, 即在最小生成树中,添加一没有被选中的边, 那么就会构成一个环,而且这条新加进去的边一定是环上最大的边。先证明一下上面的那个性质: 如果这个环上还有一条比这条新加入的边更大的边, 那我们就用这条新加入的边来替代比大的那条边, 这样我们得到的生成树更优,也就是说原创 2017-08-14 15:18:31 · 277 阅读 · 0 评论 -
JZOJ5397. 【NOIP2017提高A组模拟10.6】Biology
题解如果我们将全部字符串倒过来, 那么后缀就变成了前缀。如果用这些倒过来的字符串的建一棵tire, 最长公共前缀就是每一个字符串的最后一个点的lca的深度。查询就用倍增+lca实现, 对应每加入一个新的节点,就处理一下它的父亲。code#include<queue>#include<cstdio>#include<iostream>#include<algorithm>#include原创 2017-10-06 20:51:37 · 321 阅读 · 0 评论 -
JZOJ5385. 【NOIP2017提高A组模拟9.23】Carry
题解如果只有一份订单,我们就会很自然地选择修改路径上面最大的那一条边, 因为这样会使最大值减少。、 也就是说,只有修改某条路径上面的最大值,才会对答案有贡献。 那么这个贡献是多少? 有两种情况:1、最大值修改之后,仍然是最大值,贡献为L。2、最大值修改之后,次大值变为了最大值,贡献为最大值减去次大值。用倍增的思想,维护最大值与次大值,然后统计修改每条边的共享,选取贡献最大的边进行修改。cod原创 2017-09-25 21:26:22 · 306 阅读 · 0 评论 -
【NOIP2017提高A组模拟8.16】花花的森林
分析删边是很难的, 所以我们反过来,从后往前加边。我们知道树的直径有一个性质, 当两个树合并的时候, 新树的直径的两个端点一定是原来两棵树的四个端点中的两个。 证明比较简单。我们就先在原树上面预处理倍增数组, 对于每棵树,我们记录它直径的长度,以及两个端点。 合并的时候就用四个端点两两之间跑lca。code#include<cstdio>#include<iostream>#incl原创 2017-08-16 22:18:41 · 356 阅读 · 0 评论 -
JZOJ4701. 【NOIP2016提高A组模拟8.15】Throw
输入输出样例输入1 2 3 0 3 5样例输出YES 2数据范围20%做法bfs,加一些优化,或者用IDA*,双向广搜。100%做法对于每一次使用技能有哪些情况呢?我们看一下图片 其实每一次使用技能就只有4种情况。分别就是:中间的向两边跳,还有两边向中间跳。因为这些转移时可逆的,所以,我们只需要做从中间向两边跳的操作。我们设一个三元组(x,y,z)为了方便转移,我们再设多两个变量,l =原创 2016-08-16 16:37:44 · 2919 阅读 · 0 评论