关于一段代码

学术版

@[tianyu_awa](/user/716260) 应该是对的。 `(LCA(x, y) == y || LCA(y, z) == y)` 保证了 `y` 是 `x` 或 `z` 的祖宗结点(否则对应地, `x-y-k` 比 `x-k` 更长一些 或者 `z-y-k` 比 `z-k` 更长一些,两者都不满足,那么不管是 `x-y-k-z` 还是 `x-k-y-z` 都不是最短路径);`LCA(y, k) == k` 则保证了 `y` 不是 `x,z` 祖宗的祖宗(否则 `x-k-z` 是一条更近的路径,而 `x-y-z` 会比 `x-k-z` 更长一些,因而不是最短路径)。
by Terrible @ 2024-04-22 23:06:58


`x,z` 的路径肯定路过 `k`。 1. 如果 `LCA(x, y) == y && LCA(y, k) == k` 成立,那么意味着 `x-y-k` 是一条简单路径(没有重复结点); 2. 如果 `LCA(y, z) == y && LCA(y, k) == k` 成立,那么意味着 `k-y-z` 是一条简单路径(没有重复结点)。 1 和 2 两点有一个成立就说明 `x-k-z` 是包含 `y` 的。
by Terrible @ 2024-04-22 23:18:24


@[Terrible](/user/195942) @[Terrible](/user/195942) 谢谢大佬
by tianyu_awa @ 2024-04-23 00:25:45


都看不懂
by Kevin_BangNing @ 2024-04-23 09:29:52


|