转载 树上路径求交

原文来自 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, 很妙

原文地址:https://www.cnblogs.com/ltdjcoder/p/15333676.html