树中最长路径的公共段

Posted

技术标签:

【中文标题】树中最长路径的公共段【英文标题】:Common segment of longest paths in a tree 【发布时间】:2013-03-07 14:44:05 【问题描述】:

我遇到了一个编程问题

    给定一棵加权树。 感兴趣的节点集,我们称这个集为 S。

我们需要返回最长的理想路径中最短的公共段。 理想路径是在属于上述集合 S 的顶点上开始和终止的路径。 不能保证公共路径存在。 我知道在线性时间内找到树中最长的路径,我们也可以轻松地将其扩展到理想路径的情况,但是 2 dfs 的经典算法在 找到最长的路径,但只是最长的路径长度。 谢谢。

【问题讨论】:

【参考方案1】:

如果你有:

    路径开始 路径长度,来自 DFS 或 BFS 等算法 路径结束

您可以轻松获取路径。 修改代码:

//current vertex is v, next is u, current length is l
u.length = l + 1;
u.visited = true;
cont.push(u);

添加行:

u.previous = v;

然后你可以通过以下方式找到路径:

v = path_end;
while(v != path_begin)
    //mark, v belongs to "path"
    v = v.previous

【讨论】:

对不起,我忘了说它是一棵加权树,也可以有很多最长的路径,主要任务是获取所有这些路径。

以上是关于树中最长路径的公共段的主要内容,如果未能解决你的问题,请参考以下文章

hiho #1050 : 树中的最长路 树的直径

hihoCoder week11 树中的最长路

题解报告:hihoCoder #1050 : 树中的最长路

HihoCoder1050 树中的最长路 树形DP第三题(找不到对象)

2017CCPC中南地区赛 H题(最长路)

Xor路