c++ - 树上的路径查询
问题描述
给定一棵树和Q
要回答的查询。在每个查询中,您将获得 2 个节点u & v
。您应该返回路径,例如u -> v1 -> v2... -> v
我有一种天真的方法来为每个查询执行 DFS,但它可以做得更好吗?是否可以进行任何类型的预处理?(我是图表新手!如果我在某处出错,请帮助我并纠正我)
解决方案
我假设在每个树节点上你也有父节点,你也可以使用它在树中上升。
有了这个假设,这个问题似乎就是寻找最低共同祖先的问题。这是一个标准问题,您可以在网上轻松找到如何解决它。
一旦你拥有最低的共同祖先,你的路径将从 u--><lowest_common_ancestor>-->v
只要找到最低的共同祖先,那么进一步的算法对你来说就会变得显而易见。
推荐阅读
- r - 如何删除 spplot 中的 zcol 框?
- git - 将分支从另一个远程分支合并到我的分支后,git pull no tracking info for my branch
- java - 在 GridLayout 中交换组件时出现 IndexOutOfBoundException 和 NullPointerException?
- angular - Angular - 如何使用户角色复选框动态化
- react-native - 在 react-native Flatlist 或 scrollview 中,我们可以像 carousal 一样显示循环吗?
- angular8 - 如何在 Angular 8 中更改“ng-block-ui”的背景颜色?
- android - 在点击视图上抛出 NoSuchMethodException
- oracle - 优化器对散列连接和完全外连接做了什么?
- google-sheets-macros - 在 Google Drive 中将一张纸保存为 PDF(适用于所有用户)
- react-native - render() 方法中的异步函数失败(不变违规)