通过反转 p arcs 从有向图中消除循环
Eliminate cycle from a digraph by reversing p arcs
任何人都可以帮我解决这个问题或给我一些解决问题的提示吗?
我们考虑给定城市的街道网络。证明如果我们可以通过创建至多 p 个阻塞(阻塞意味着阻碍一条街道的一条路)来移除该网络中的所有环路,那么我们可以通过倒转至多 p 条街道的一条路来移除城市网络中的所有环路。 (将给定的双向街道的一种方式反转意味着将其转换为单向街道;反转单向街道意味着将其转换为另一条单向街道。)
一组边,如果从有向图中删除,将使其成为非循环的,称为反馈弧集。因此,让我们假设您将图中最小的反馈弧集 S(我们知道,它的大小最多为 p)并将其删除,留下一个无环图。
现在,想象一下将 S 中的任何一条边添加回剩余的 DAG 中。这必须导致一个循环——否则,我们的反馈集 S 中不需要该边,因此 S 不是最小的。
然后我们可以问 - 这个循环究竟是如何产生的?好吧,由于 DAG 具有拓扑排序,因此该循环必须通过沿着从 DAG 中的某个节点 v 返回到祖先 u 的新添加边来发生 - 它在拓扑排序中出现得比 v 早 - 然后遵循一些子序列该拓扑排序的节点回到 v.
现在假设您将这条边添加回图中,但您是通过反向添加它(从 u 到 v)来实现的。您可以争辩说旧 DAG 的拓扑排序与新 DAG 完全相同,因为在排序中 u 已经在 v 之前。这意味着您只剩下一个 DAG,不仅如此,旧的拓扑排序仍然是新 DAG 的有效拓扑排序!
因此,您可以重复此过程。从 S 中选择另一条边并将其添加回去。这导致了一个循环,你可以争辩说这个循环同样可以通过从拓扑排序中的一个节点走到一个祖先然后再走回去来形成。更准确地说,至少有一个闭合的循环必须来自通过删除所有 S 形成的 DAG。因此,将该边的反向添加回图中不会产生任何循环,因为它保留了拓扑顺序。
这样做的最终效果是,如果您有一组最小的边可以移除以删除所有循环(例如,最多移除 p 条边),您可以改为反转所有这些边以删除所有循环(最多反转 p 条边)。
希望对您有所帮助!
任何人都可以帮我解决这个问题或给我一些解决问题的提示吗?
我们考虑给定城市的街道网络。证明如果我们可以通过创建至多 p 个阻塞(阻塞意味着阻碍一条街道的一条路)来移除该网络中的所有环路,那么我们可以通过倒转至多 p 条街道的一条路来移除城市网络中的所有环路。 (将给定的双向街道的一种方式反转意味着将其转换为单向街道;反转单向街道意味着将其转换为另一条单向街道。)
一组边,如果从有向图中删除,将使其成为非循环的,称为反馈弧集。因此,让我们假设您将图中最小的反馈弧集 S(我们知道,它的大小最多为 p)并将其删除,留下一个无环图。
现在,想象一下将 S 中的任何一条边添加回剩余的 DAG 中。这必须导致一个循环——否则,我们的反馈集 S 中不需要该边,因此 S 不是最小的。
然后我们可以问 - 这个循环究竟是如何产生的?好吧,由于 DAG 具有拓扑排序,因此该循环必须通过沿着从 DAG 中的某个节点 v 返回到祖先 u 的新添加边来发生 - 它在拓扑排序中出现得比 v 早 - 然后遵循一些子序列该拓扑排序的节点回到 v.
现在假设您将这条边添加回图中,但您是通过反向添加它(从 u 到 v)来实现的。您可以争辩说旧 DAG 的拓扑排序与新 DAG 完全相同,因为在排序中 u 已经在 v 之前。这意味着您只剩下一个 DAG,不仅如此,旧的拓扑排序仍然是新 DAG 的有效拓扑排序!
因此,您可以重复此过程。从 S 中选择另一条边并将其添加回去。这导致了一个循环,你可以争辩说这个循环同样可以通过从拓扑排序中的一个节点走到一个祖先然后再走回去来形成。更准确地说,至少有一个闭合的循环必须来自通过删除所有 S 形成的 DAG。因此,将该边的反向添加回图中不会产生任何循环,因为它保留了拓扑顺序。
这样做的最终效果是,如果您有一组最小的边可以移除以删除所有循环(例如,最多移除 p 条边),您可以改为反转所有这些边以删除所有循环(最多反转 p 条边)。
希望对您有所帮助!