转载 树上路径求交
原文来自 https://www.cnblogs.com/Sakits/p/8085864.html
树上路径交
两条树上的路径[a,b]和[c,d]有交,则有lca(a,b)在[c,d]上或lca(c,d)在[a,b]上。
其实只要深度大的lca在另一条链上就好了,所以设x=lca(a,b)深度较大。
充分性证明:x在[c,d]上,则[a,b]和[c,d]显然有交。
必要性证明:x不在[c,d]上,如果[a,b]上有点y与[c,d]有交,因为lca(c,d)深度较小,所以y的深度必定小于x,那么x就不是>lca(a,b)了,矛盾,所以如果x不在[c,d]上,[a,b]与[c,d]无交。
证毕。
其实根本不用证明...太容易理解了...
判断x在[c,d]上只需要判断x是lca(c,d)的儿子且x是c或d的父亲。
tql orz, 很妙