我正在尝试解决this problem但无法快速解决问题。
简而言之 - 我们有一个图表(定向),我们想要找出哪个节点(一组节点可供选择),我们可以访问大多数节点。一个简单的实现是从每个节点运行DFS / BFS并查看我们可以访问的数量。但它太慢了,因为图中有超过5000个节点。运行5000 BFS / DFS需要很长时间。
另一方面,我也觉得这个问题可能与Disjoint Set数据结构有关?但是我无法像在我的不相交的集合实现中那样制定一些上述规则。
有人可以提示如何解决这个问题吗?
答案 0 :(得分:3)
第3步 - 详细说明:
(为了澄清原因,我将原始图形中的顶点表示为“节点”,并将SCC图形中的顶点表示为“顶点”。
在步骤3中,您希望找到可从SCC的每个顶点到达的节点数。这可以通过显式查找此集合,或仅查找节点数量来完成:
|A|+|B|- |A[intersection]B|
。
|A|+|B|+|C|-|A[intersrction]B| - |A[intersection]C| - |B[intersection]C + |A[intersection]B[intersection]C|