繁体   English   中英

如何找到某个顶点可到达的所有边的总权重?

[英]How to find the sum weight of all edges reachable from some vertex?

考虑没有周期的有向图。 我需要为每个u找到可从u到达的边缘的总权重(通过可到达我们意味着存在从uv的路径)。

现在,我想到的是运行拓扑排序,然后开始从最后一个节点运行到第一个节点(可以通过交换边的方向来进行)

然后我们评估f[v] = f[u] + w(u,v)

但是有一个问题 对于此图,我们将计算f[d]两次。 我该如何克服?

在此处输入图片说明

您可以使用BFS或DFS来实现此目的。

total = 0
dfs (node):
  if visited[node] == 1:
      return
  visited[node] = 1
  for all u connected to node:
      total += weight[node][u]
      dfs(u)

请注意,我们在total += weight[node][u]之后检查total += weight[node][u]

您可以使用自下而上的方法。 首先计算每个顶点的出度,现在出度为0的顶点的F [u] = 0。 现在,将所有这些顶点添加到队列Q中。
同样,您需要存储图的转置,假设它是T。

While(!Q.empty){
u=Q.front();
Q.pop();
for all edges E originating from T[u]{
F[v]+=w; (where (u,v) was the edge with w as weight)
//now remove u from the graph
outdegree[v]--;
if(outdegree[v]==0)
Q.push(v);
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM