![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LCA
EnjoyingAC
bugger,写bug爱好者。
展开
-
HDU3078 Network(tarjan离线处理+排序,树链第k大)
题意给定一棵树,每个节点都有一个权值。 有m个操作: 0 a b表示将a节点的权值改为b k a b表示(k不为0)输出路径a–>b上节点(包括a、b)的权值第k大。解题用tarjan算法离线求出所有查询的lca。然后通过前缀点pre来暴力统计路径上的点,将点放入数组s中,排序一次。比较数组大小sum与k的关系,如果k>sum,无解;否则输出第k大(注意不是第k小...原创 2018-06-12 09:19:12 · 325 阅读 · 0 评论 -
HDU2586 How far away ? (tarjan离线版+LCA模板题)
题意勇气小镇是一个有着n个房屋的小镇,为什么把它叫做勇气小镇呢,这个故事就要从勇气小镇成立的那天说起了, 修建小镇的时候,为了让小镇有特色,镇长特地只修了n-1条路,并且规定说,所有在勇气小镇的村民,每一次出门必须规划好路线, 路线必须满足在到达终点之前绝对不走回头路。每个人都要这样,不然那个人就不配在小镇生活下去,因为他没有这个勇气。 事实上,这并不能算一项挑战,因为n-1条路已经连...原创 2018-06-12 09:30:33 · 220 阅读 · 0 评论 -
HDU2874 Connections between cities(容易超内存,tarjan离线LCA)
题意给出一个森林,求任意两点之间的距离。若两者不在一棵树上,输出“Not connected”,否则输出两点之间最短距离。解题如果在一棵树上,显然最短距离为u–>lca(u,v)–>v路径上权值之和。设d[u]表示节点u到根节点的距离。 此题卡内存,不能用下面方式存lca。q[i].lca=q[i^1].lca=find(v);使前向星只存to和next,不存fr...原创 2018-06-12 11:10:47 · 204 阅读 · 0 评论 -
POJ1470 Closest Common Ancestors(离线LCA+注意根的处理)
题意给定一个有根树,查询若干组(u,v)的lca,输出每个结点作为lca的次数。如果一次也没有,则不输出。解题根据根结点没有其他结点指向这一特性确定根,然后调用tarjan算法离线处理所有查询的lca。最后统计并输出即可。AC代码//610ms 7.2MB#include <cstdio>#include <cstring>#inclu...原创 2018-06-12 22:16:55 · 187 阅读 · 0 评论 -
HDU4547 CD操作(tarjan版LCA+比较裸的LCA)
题目在Windows下我们可以通过cmd运行DOS的部分功能,其中CD是一条很有意思的命令,通过CD操作,我们可以改变当前目录。 这里我们简化一下问题,假设只有一个根目录,CD操作也只有两种方式: 1. CD 当前目录名…\目标目录名 (中间可以包含若干目录,保证目标目录通过绝对路径可达) 2. CD .. (返回当前目录的上级目录) 现在给...原创 2018-06-13 08:39:43 · 213 阅读 · 0 评论 -
ZOJ3195 Design the city (tarjan版LCA求树上三点最短距离)
题意给定一个带边权的无根树,求任意三点的最短距离。解题设d[u]为节点u到根的距离。 树上任意两点的最短距离为:d[u]+d[v]-2*d[lca]. lca为u和v的最近公共祖先。 将求三点距离转化为求两点距离,容易得到: x、y、z三点最短距离=(x和y的最短距离+x和z的最短距离+y和z的最短距离)/ 2.AC代码//100ms 11.6MB#include...原创 2018-06-13 09:36:01 · 299 阅读 · 0 评论