hdu2586 lca_tarjan的应用
来源:互联网 发布:淘宝助理一键导出 编辑:程序博客网 时间:2024/05/16 12:16
此题可以用lca_tarjan的方法来解决。
此题题意是,给定一棵树,每条边都有一定的权值,q次询问,每次询问某两点间的距离。这样就可以用LCA来解,首先找到u, v 两点的lca,然后计算一下距离值就可以了。这里的计算方法是,记下根结点到任意一点的距离dis [ x ] ,这样ans = dis[u] + dis[v] - 2 * dis[lca(v, v)]了,
那么为什么会呢
0
|
1
/ \
2 3
请看2,3的距离是2-->1-->3那么如果dis都表示个点到0点的距离,那么2,0的距离是2-->1-->0 那么3,0的距离是3-->1-->0由于0,1距离重复算了两遍
那么:ans = dis[u] + dis[v] - 2 * dis[lca(v, v)]
由于tarjan是需要离线算的,所以需要先把询问存下来并且编号,那么输出的时候才能保证与输入的编号一致。
此题数据比较水,我开始写错下标都可以ac。后来做模板在看的时候就看出错误了。
下面blog详细分析了tarjan代码,但是我的写法是在最后才套用ans的那个公式。我只记录到dis。那么就不用判断博客所说的建了重边判断的问题。但是这样可能需要多开1维数组来存
http://blog.csdn.net/taotaotaotao910429/article/details/7747346
- hdu2586 lca_tarjan的应用
- HDU2586 How far away ? LCA_Tarjan解法
- hdu2586
- HDU2586
- hdu2586
- HDU2586
- hdu2586
- hdu2586 LCA应用 求树的任意两节点的距离
- HDU2586(最近公共祖先的Tarjan算法)
- hdu2586 树上两点之间的距离 tarjan
- hdu2586(LCA的一个例子,在线算法RMQ)
- 树的最近公共祖先——LCA poj1330 hdu2586
- hdu2586 LCA
- hdu2586(LCA)
- hdu2586 lca
- poj1330 lca_tarjan || 并查集
- POJ 1330 最近公共祖先LCA_Tarjan 【水】
- POJ 1330 最近公共祖先LCA_Tarjan 【水】
- Windows 完成端口
- Linux驱动开发环境配置(内核源码树构造) --------转
- shell脚本判断进程是否存在,并重新启动
- 标准流,非标准流,盒子模型
- 一个程序员的迷茫
- hdu2586 lca_tarjan的应用
- 晕,Remove
- paip.css的覆盖
- To Fill or Not to Fill (九度贪心题目)
- c# 网站返回序列化二进制客户端接收与提交
- Windows下Cygwin+Eclipse搭建Hadoop开发环境
- 迷茫的程序员
- Java初学者的30个常见问题
- 压缩算法之Elias Gamma Coding & Elias Delta Coding