最近公共祖先(LCA)
星空皓月
工欲善其事,必先利其器。
展开
-
西南交大峨眉校区INT杯2020-K.建教室【树的直径+LCA倍增】
建教室Description渣哥所在的学校最近建起了新教室。每当学校建起一个新教室的时候,学校会将这个教室用一条双向通行道路与一个现有教室连接起来。因为渣哥非常热爱运动,他喜欢在教室间穿梭。当一个新教室被建造,他想要知道从某个教室出发,到距离这个教室最远的教室的距离。两个教室间的距离为这两个教室间的道路的条数。接下来会给出总共N次指令,每个指令都是“建造”和“求距离”之一。对于一个建造指令,学校建造一个教室,并将其与至多一个现有的教室连接起来。对于一个距离指令,渣哥向你询问从某个特定的教室到离它最远的原创 2020-12-15 00:44:15 · 155 阅读 · 1 评论 -
CF - 620(div2) -- E. 1-Trees and Queries【LCA + 思维】
题意给出一棵树,询问在增加一条边的情况下,是否存在a->b走过的边权和正好为k(可重复经过某边)。思路ps:漏了两个判断条件,真惨。首先可以重复经过某些顶点和边,假设a到b的距离是dis,那么dis + 2, dis + 4,dis + 6......这些都是满足的a到达b,现在只需要判断奇偶性。如果dis是奇数,那么k必须是大于dis的奇数才行;偶数同理。a到b有三条路径d,a -> b,a -> x - > y - > b, a- > y - &原创 2020-08-11 18:02:01 · 124 阅读 · 0 评论 -
CF - 629(div3) -- E - Tree Queries【LCA + 思维】
题意给出一棵树,问是否存在1到某个结点的一条路径,使得k个结点到这条路径的距离<=1.思路在k个结点中,找深度最大的这个结点mx,然后与每个结点求ui = LCA(mx, ki),判断dis(ui, ki) <= 1即可。时间复杂度m * k * lognAC代码#include<cstdio>#include<iostream>#include<vector>#include<cstring>#include<alg原创 2020-08-11 17:37:00 · 146 阅读 · 0 评论