我希望从所有节点获得所有节点的距离。有一些问题,但没有解决我的问题。 我的应用是我正在实现递归DFS并在回溯时存储每个路径的结果,但问题是我的运行时间很长而且我经历了N次路径(N是边数)。 / p>
正如您在我的代码中所看到的,我正在为每个可能的节点运行dfs作为根。我不知道如何在DFS搜索的一次迭代中重用路径来知道答案。
我认为它可以在O(n)中作为最小生成树完成,并且在一对节点之间只有一条路径。
我的代码:
for(i=1;i<=n;i++)
{
fill(visited.begin(),visited.end(),0);
ans=0;
calc(i,i);
}
主要:
SELECT MAX(ASAP) as ASAP, RENTALNUMBER, Area, PadNum, Size, Pet
FROM t
GROUP BY RENTALNUMBER, Area, PadNum, Size, Pet;
答案 0 :(得分:1)
我可以想到使用分而治之的复杂性 O(n * logn)的解决方案。让我分享一下。
让我们选择距离 d 的边缘 e ,这是连接节点 a 和 b 。让我们把它剪掉。现在我们有两棵树,根 a 和 b 。我们假设,
因此原始树中每个节点之间的距离为: ca + cb +(nb * ra + na * d * nb + na * rb))
现在,我们可以使用相同的方法计算树 a 或 b 中每个节点的距离总和。需要注意的一点是,我们必须选择这样的边缘 e ,以使组件数量之间的差异不大。您总是可以在树中找到一条边,如果您剪切该边,则生成的两棵树中的节点数之间的差异将不会超过1.