LCA
QAQwdd
这个作者很懒,什么都没留下…
展开
-
最近公共祖先/LCA模板
惊觉自己还不会倍增。。。 水一发模板 ↑洛谷的图 求LCA(最近公共祖先)算法流程: - 将深度更深的点跳到与另一个点同一高度 - 两个点同时向上跳,直到找到LCA。 当然,我们可以用朴素算法,不过复杂度是O(n)的,会超时,这里我们用倍增来做。 倍增,简单来说就是“成倍增长”。 这里要用到一个定理:任何一个数都能表示为唯一的二进制分解形式。 显然,就像十进制下能不重复的...原创 2018-07-15 18:47:36 · 131 阅读 · 0 评论 -
NOIP2015 运输计划 LCA+树上差分+二分
题目大意:给定一棵树,再给定k条路径,求把一条边权改为0后使这些路径的最长距离最小。 题解:首先可以想到用二分(谁说想得到的!!!),在枚举出来的长度mid上找到长度大于mid的路径,检查把这些路径中最长的公共边置为0之后的最长链。若长度还是大于mid,则该长度不合法。实际编码中,可以用树上差分来解决边覆盖的问题。 我用倍增写的LCA,如果换成树链剖分或者Tarjan,RMQ什么的会更快~ ...原创 2018-08-18 21:26:17 · 174 阅读 · 0 评论 -
AHOI2008 紧急集合 LCA
题目大意:给一棵树,求三点之间最短距离, 并求最短距离所在的点。 题解:求出两两之间的LCA,观察可以发现,有两个LCA是相同的,且这个点一定在所有LCA中深度最浅。 画一个图可以发现,集合点就是另一个LCA,因为这个点是这三个点互相路径连接起来的公共点。 至于距离,找个例子可以发现距离是dep[a]+dep[b]+dep[c]−dep[lca1]−dep[lca2]−dep[lca3]de...原创 2018-08-19 16:02:34 · 172 阅读 · 0 评论 -
JLOI2014 松鼠的新家 LCA+树上差分
传送门 题解:很简单,就是求树上点的差分。把从a[i]到a[i+1]的路径上的点覆盖一次,记录总覆盖次数 点的差分和边的差分略有不同,不过大体思路都是差不多的,边的差分是在起点,终点tag+1,LCA处-2;而点的差分是起点,终点tag+1,LCA及其父亲tag-1。为什么?模拟一下就行了 然后求个子树和.jpg 注意这道题起点和终点是连在一起的,所以除了第一条之外的所有起点都要tag-1...原创 2018-08-26 21:22:26 · 219 阅读 · 0 评论 -
NOIP2016 天天爱跑步 LCA+差分+桶
传送门 NOIP史上最难一题。。。 部分分出正解系列 测试点1-5:直接模拟即可 测试点6-8:树退化成一条链。我们先从dep[S]<dep[T]dep[S]<dep[T]dep[S]<dep[T]的情况开始想。depdepdep表示该点到点1的距离。如果路径上有个点满足被观察到的条件,那么dep[i]−dep[S]=w[i]dep[i]-dep[S]=w[i]d...原创 2018-10-19 21:04:35 · 239 阅读 · 0 评论