首页 > 其他 > 详细

#树上最短路研究 洛谷P3398 仓鼠找sugar

时间:2019-10-25 13:56:29      阅读:62      评论:0      收藏:0      [点我收藏+]

问题:给定四个节点(a,b),(c,d),考虑(a,b)的树上最短路与(c,d)的树上最短路是否有交点;

思路一:

如果存在交点,(a,b)或者(c,d)的LCA必定在另一条路径上!

设(a,b),(c,d)之间存在相交的一段路径(e,f)

也即是(e,f)是路径a,b;c,d的一个子集

如果(a,b)的LCA在(e,f)上,则显然有LCA(e,f)=LCA(a,b);

因为如果e,f的LCA不是a,b的LCA,而LCA(a,b)在(e,f)上,那么e,f的LCA深度必然比a,b的小,那么a,b,的LCA就应该是e,f的了!

而(e,f)有同时是c,d的一段,同理,LCA(c,d)=LCA(e,f)=LCA(a,b);

因此c,d的LCA在a,b的路径上且即使a,b的LCA

如果(a,b)的LCA不在(e,f)上

令LCA(a,b)=x,LCA(c,d)=y;

容易知道:x的深度比LCA(e,f)要小

而容易知道:e,f的深度比c,d要小,那么

必然有y=LCA(e,f)

也即是y在(a,b)上

综合,当存在交集时,深度较深的LCA必然在深度较浅的LCA的路径上!

那么如何验证一个点是否是在一条路径上呢?

1.计算出这个点到两个端点的距离和,如果等于两点长度,则在

2.对于路径(s,t)

如果LCA(s,x)=x或LCA(t,x)=x成立,则在

 

#树上最短路研究 洛谷P3398 仓鼠找sugar

原文:https://www.cnblogs.com/little-cute-hjr/p/11737163.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!