HDU 2586 How far away ?题解与分析

该博客详细分析了HDU 2586问题,即在一个由n个房子和n-1条路径构成的村庄中,如何找到任意两个房子间的最短距离。通过利用最近公共祖先(LCA)算法,结合临接链表存储数据,博主给出了求解距离的方法,并提供了代码实现,运行时间为31MS。
摘要由CSDN通过智能技术生成

          HDU 2586 How far away ?

题目大意】:

          一个村子里有n个房子,这n个房子用n-1条路连接起来,接下来有m次询问,每次询问两个房子a,b之间的距离是多少。

【分析】:

         这是个求最近公共祖先的问题,用临接链表存下每条边和询问的信息,然后跑一遍Tarjan(算法详解见:http://blog.csdn.net/csyzcyj/article/details/10051173),最后对于询问i,j的LCA,答案为dist[i]+dist[j]-2*dist[LCA(i,j)],这里dist[i]为i点到1号根节点的距离

【代码】:用时31MS,好像将更新LCA操作整体放后面也行

#include<stdio.h&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值