【问题标题】:Query check if there's a path between 2 nodes after an edge / node is removed删除边/节点后查询两个节点之间是否存在路径
【发布时间】:2021-12-10 22:04:47
【问题描述】:

问题:

给定一个有 N 个节点和 M 个边的无向图。给定 Q 个查询,有 2 种查询类型:

  • 1 - A - B - U - V

删除边U-V后检查节点A和B之间是否有路径

  • 2 - A - B - X

删除节点X后检查节点A和B之间是否有路径

约束:

N <= 100000
M <= 500000
Q <= 100000

P/S:

我认为删除后 A 和 B 之间存在路径的唯一方法是 A、B 在同一个Biconnected Component 或边缘/节点不是桥/弧。

但是由于我们对于每个查询只有 logN 时间(因为最多有 100.000 个查询),我无法找到一种方法来检查 A、B 是否在 O(logN) 中的同一个双连通分量中。

有办法吗?或者这个问题有不同的解决方案吗?

【问题讨论】:

标签: algorithm tree graph-theory undirected-graph


【解决方案1】:

执行此操作的简单方法是深度优先搜索,从 A 开始,如果到达 B,则停止并返回 true,如果无法到达 B,则返回 false。

了解您的实际性能要求(以秒为单位)会很有用。

PathFinder Graph Theory Engine 可以检查两个随机节点是否连接在包含 403,394 个节点和 3,387,388 个链接的图中,平均时间为 0.14 秒(不同随机节点的 100 次测试)

您的图表大约小 4 到 10 倍,所以我想它可以在十分之一秒内完成。

对于不到 3 小时的 100,000 个查询。

您必须发布您的测试图表才能更准确地衡量性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多