lca集锦
2015-08-16 14:15
218 查看
1.求树上两点距离
dis(a,b)=dis(a,root)+dis(b,root)-2*dis(lca(a,b),root)
2.求树上到达三点距离之和最小的点(重复路径重复计算)
t=lca(a,b)^lca(b,c)^lca(c,a)
ans=d(t,a)+d(t,b)+d(t,c)
注:到达树上三点距离之和的点只有一个。证明如下:
先考虑其中两点,如果另一点在该连线上,那么答案只有该点,如果不再该连线上,那么答案就是另一点到达该线最短距离的交点,也只有一点。
3.求树上三点相连后的最短距离(与2不同,重复路径计算一次即可)
ans=(dis(a,b)+dis(b,c)+dis(c,a))/2
4.寻找树上到x点距离严格小于到达y和z点距离的点的总数
1)求<x,y>和<x,z>的中点z1,z2
2)讨论z1,z2和x的位置关系求解
5.求在一颗树上填边后桥的数量。
未添边时,桥为n-1,添边后桥的数量减少该两点树中路径长度的数量,但是可能出现重叠的情况因此需要记录当前点是否已经属于某个非桥环。
所以每条边最多遍历一次,总复杂度不超过O(n)
dis(a,b)=dis(a,root)+dis(b,root)-2*dis(lca(a,b),root)
2.求树上到达三点距离之和最小的点(重复路径重复计算)
t=lca(a,b)^lca(b,c)^lca(c,a)
ans=d(t,a)+d(t,b)+d(t,c)
注:到达树上三点距离之和的点只有一个。证明如下:
先考虑其中两点,如果另一点在该连线上,那么答案只有该点,如果不再该连线上,那么答案就是另一点到达该线最短距离的交点,也只有一点。
3.求树上三点相连后的最短距离(与2不同,重复路径计算一次即可)
ans=(dis(a,b)+dis(b,c)+dis(c,a))/2
4.寻找树上到x点距离严格小于到达y和z点距离的点的总数
1)求<x,y>和<x,z>的中点z1,z2
2)讨论z1,z2和x的位置关系求解
5.求在一颗树上填边后桥的数量。
未添边时,桥为n-1,添边后桥的数量减少该两点树中路径长度的数量,但是可能出现重叠的情况因此需要记录当前点是否已经属于某个非桥环。
所以每条边最多遍历一次,总复杂度不超过O(n)
相关文章推荐
- URAL1306 Sequence Median(卡内存神题)
- Python包管理工具-pip
- Binary Tree Paths
- POJ 3904 Sky Code (容斥+莫比乌斯反演)
- 图像处理算法回顾基本框架
- NUBT 1580 素数分解 母函数法解
- openstack中虚拟机怎么与物理机通信
- notify vs nofifyall
- SSH深度历险记(九) Struts2+DWZ+Uploadify多文件(文件和图片等。)上传
- oc对象方法
- svn网络服务器项目导入到Eclipse
- win 环境安装python 和 Py pip
- 8个DBA最常用的监控Oracle数据库的常用shell脚本
- 下拉刷新,在 ActionBar 上显示效果图
- Hadoop之MapReduce的两种任务模式
- oracle v$sqlarea 分析SQL语句使用资源情况 确认是否绑定变量
- LayoutInflater的原理分析【转载】
- POJ 3268 Silver Cow Party(dijkstra+矩阵转置)
- 1035. 插入与归并(25)
- 论函数的设计应如何才好,返回临时变量 | 返回引用 | 传递引用