ABC133 F Colorful Tree 最近公共祖先(LCA)+树形策略记忆化搜索

ABC133 F Colorful Tree 最近公共祖先(LCA)+树形策略记忆化搜索

题目

N N N个顶点组成的一棵树,给边先着色并赋权(赋距离)。
现给定问题集,第 i i i个问题是:
假设把颜色为 x i x_i xi的所有线段的长度统一改为 y i y_i yi,求从 u i u_i ui顶点到 v i v_i vi顶点的最小距离。

考察

考察内容
如果用在线算法寻找每个问题的解,会TLE。若用离线算法,用字符串记忆所有节点的路径并两两比较,会同时TLE和MLE。所以这里我们需要谨慎考虑时间复杂度和空间复杂度。

  1. 使用Tarjan的离线LCA算法是这题的首选。进行第一次树形探索。 O ( n + q ) O(n+q) O(n+q)
  2. 使用Tarjan后用map<pii,int>记录所有LCA的解。 O ( n + q l o g q ) O(n+qlogq) O(n+qlogq)
  3. 将每组u,v和LCA(u,v)需要计算的颜色标记在树形顶点中,这里用map数组,key为颜色,value为当前顶点前的当前颜色的总距离和总线段数量。 O ( n + q l o g q + 3 q ) O(n+qlogq+3q) O(n+qlogq+3q)
  4. 开一个距离全局变量和两个dp全局数组(记录到当前顶点为止的总距离,以及颜色c下的总距离和颜色c下的总线段数量) O (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值